mirror of
https://github.com/dhil/phd-dissertation
synced 2026-03-13 11:08:25 +00:00
Stream redirection example
This commit is contained in:
@@ -441,6 +441,59 @@ fun init(fsys, main) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###
|
||||||
|
### Stream redirection
|
||||||
|
###
|
||||||
|
sig >> : (Comp(a, { Create: (String) -> FileDescr
|
||||||
|
, Open: (String) {}-> Option (FileDescr)
|
||||||
|
, Write:(FileDescr, String) -> () |e}), String)
|
||||||
|
{ Create:(String) -> FileDescr
|
||||||
|
, Open:(String) -> Option (FileDescr)
|
||||||
|
, Write:(FileDescr, String) -> () |e}~> ()
|
||||||
|
op f >> fname {
|
||||||
|
var fd = create(fname);
|
||||||
|
handle(f()) {
|
||||||
|
case Return(_) -> ()
|
||||||
|
case Write(_, cs, resume) ->
|
||||||
|
resume(write(fd, cs))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sig >>> : (Comp(a, { Create: (String) -> FileDescr
|
||||||
|
, Open: (String) -> Option (FileDescr)
|
||||||
|
, Write:(FileDescr, String) -> () |e}), String)
|
||||||
|
{ Create:(String) -> FileDescr
|
||||||
|
, Open:(String) -> Option (FileDescr)
|
||||||
|
, Write:(FileDescr, String) -> () |e}~> ()
|
||||||
|
op f >>> fname {
|
||||||
|
var fd = switch (open'(fname)) {
|
||||||
|
case None -> create(fname)
|
||||||
|
case Some(fd) -> fd
|
||||||
|
};
|
||||||
|
handle(f()) {
|
||||||
|
case Return(_) -> ()
|
||||||
|
case Write(_, cs, resume) ->
|
||||||
|
resume(write(fd, cs))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun example6() {
|
||||||
|
if (fork()) {
|
||||||
|
su(Alice);
|
||||||
|
var fd = create("ritchie.txt");
|
||||||
|
fun(){echo("UNIX is basically a simple operating system, ")} >> "ritchie.txt";
|
||||||
|
fun(){echo("but you have to be a genius to understand the simplicity.")} >>> "ritchie.txt"
|
||||||
|
} else {
|
||||||
|
su(Bob);
|
||||||
|
var hamlet = "hamlet";
|
||||||
|
fun(){echo("To be, or not to be, that is the question:\n")} >> hamlet;
|
||||||
|
fun(){echo("Whether 'tis nobler in the mind to suffer\n")} >>> hamlet;
|
||||||
|
fun(){echo("The slings and arrows of outrageous fortune,\n")} >>> hamlet;
|
||||||
|
fun(){echo("Or to take arms against a sea of troubles\n")} >>> hamlet;
|
||||||
|
fun(){echo("And by opposing end them.")} >>> hamlet
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
### TCP threeway handshake
|
### TCP threeway handshake
|
||||||
###
|
###
|
||||||
|
|||||||
Reference in New Issue
Block a user