xref: /plan9/sys/man/3/srv (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
SRV 3
NAME
srv - server registry
SYNOPSIS
 bind #s /srv 
 #s/ service1  #s/ service2  ...
DESCRIPTION
The srv device provides a one-level directory holding already-open channels to services. In effect, srv is a bulletin board on which processes may post open file descriptors to make them available to other processes.

To install a channel, create a new file such as /srv/myserv and then write a text string (suitable for strtoul ; see atof (2)) giving the file descriptor number of an open file. Any process may then open /srv/myserv to acquire another reference to the open file that was registered.

An entry in srv holds a reference to the associated file even if no process has the file open. Removing the file from /srv releases that reference.

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.

EXAMPLE
To drop one end of a pipe into /srv , that is, to create a named pipe:
.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");

At this point, any process may open and read /srv/namedpipe to receive the hello string. Data written to /srv/namedpipe can be received by executing

.EX read(p[1], buf, sizeof buf);

in the above process.

SOURCE
/sys/src/9/port/devsrv.c