mirror of
https://github.com/dhil/phd-dissertation
synced 2026-03-12 18:48: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
|
||||
###
|
||||
|
||||
Reference in New Issue
Block a user