linux: shared memory interface - link with librt
[supercollider.git] / HelpSource / Classes / Pipe.schelp
blob4503c3299c0a313c781081004b49beb655db6dfd
1 class:: Pipe
2 summary:: pipe stdin to, or stdout from, a unix shell command
3 related:: Classes/UnixFILE
4 categories:: Files
6 description::
7 Pipe stdin to, or stdout from, a unix shell command. Pipe treats the shell command as if it were a UnixFILE, and returns nil when done. See link::Classes/UnixFILE:: for details of the access methods. Pipe must be explicitly closed. Do not rely on the garbage collector to do this for you!
9 ClassMethods::
11 method::new
13 argument::commandLine
14 A link::Classes/String:: representing a valid shell command.
16 argument::mode
17 A link::Classes/String:: representing the mode. Valid modes are "w" (pipe to stdin) and "r" (pipe from stdout).
19 InstanceMethods::
21 private::prClose, prOpen
23 method::open
24 Open the file.
26 argument::mode
27 A link::Classes/String:: passed to popen, so should be one of: "r","w"
29 method::close
30 Closes the pipe, waiting for the command to finish. You must do this explicitly before the Pipe object is garbage collected.
32 returns:: The exit status of the command (an Integer).
34 Examples::
36 note::
37 For anyone still using OS X 10.3, unix commands like pipe do not work when the server is booted; quit the server, otherwise sc crashes. More recent OS X is not affected.
40 code::
41 // this pipes in stdout from ls
43 var p, l;
44 p = Pipe.new("ls -l", "r");                     // list directory contents in long format
45 l = p.getLine;                                  // get the first line
46 while({l.notNil}, {l.postln; l = p.getLine; }); // post until l = nil
47 p.close;                                        // close the pipe to avoid that nasty buildup
51 A more time-intensive request:
52 code::
54 var p, l;
55 p = Pipe.new("ping -c10 sourceforge.net", "r"); // list directory contents in long format
56 l = p.getLine;                                  // get the first line
57 while({l.notNil}, {l.postln; l = p.getLine; }); // post until l = nil
58 p.close;                                        // close the pipe to avoid that nasty buildup