diff options
Diffstat (limited to 'static/plan9-4e/man3/srv.3')
| -rw-r--r-- | static/plan9-4e/man3/srv.3 | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/static/plan9-4e/man3/srv.3 b/static/plan9-4e/man3/srv.3 new file mode 100644 index 00000000..820c849d --- /dev/null +++ b/static/plan9-4e/man3/srv.3 @@ -0,0 +1,74 @@ +.TH SRV 3 +.SH NAME +srv \- server registry +.SH SYNOPSIS +.nf +.B bind #s /srv + +.BI #s/ service1 +.BI #s/ service2 + ... +.fi +.SH DESCRIPTION +The +.I srv +device provides a one-level directory holding +already-open channels to services. +In effect, +.I srv +is a bulletin board on which processes may post open file descriptors +to make them available to other processes. +.PP +To install a channel, create +a new file such as +.B /srv/myserv +and then write a text string (suitable for +.IR strtoul ; +see +.IR atof (2)) +giving the file descriptor number of an open file. +Any process may then open +.B /srv/myserv +to acquire another reference to the open file that was registered. +.PP +An entry in +.I srv +holds a reference to the associated file even if no process has the +file open. Removing the file from +.B /srv +releases that reference. +.PP +It is an error to write more than one number into a server file, +or to create a file with a name that is already being used. +.SH EXAMPLE +To drop one end of a pipe into +.BR /srv , +that is, to create a named pipe: +.IP +.EX +int fd, p[2]; +char buf[32]; + +pipe(p); +fd = create("/srv/namedpipe", OWRITE, 0666); +fprint(fd, "%d", p[0]); +close(fd); +close(p[0]); +fprint(p[1], "hello"); +.EE +.PP +At this point, any process may open and read +.B /srv/namedpipe +to receive the +.B hello +string. Data written to +.B /srv/namedpipe +can be received by executing +.IP +.EX +read(p[1], buf, sizeof buf); +.EE +.PP +in the above process. +.SH SOURCE +.B /sys/src/9/port/devsrv.c |
