NAME
srv – server registry |
SYNOPSIS
bind –c #s$srvspec /srv /srv/clone /srv/id/... /srv/service1 /srv/service2 ... |
DESCRIPTION
The srv device provides a tree of directories 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.
Opening the clone file allocates a new service directory. Reading
clone returns the id of the new directory. This new service directory
can then be accessed at /srv/id. Directories are recursive; each
new service directory contains its own clone file and sub–directories.
Directories can be walked from the root such as
#s/id1/id2/id3 which makes them globally addressable. As a convention,
/lib/namespace accepts the path to the service directory from
the environment variable $srvspec, making it possible to start
a new namespace using a specific service directory as a starting
point. |
EXAMPLE
To drop one end of a pipe into /srv, that is, to create a named
pipe:
Create a disposable /srv and start a factotum(4) and a rio(1)
in it.
|
SOURCE
/sys/src/9/port/devsrv.c |