| .TH INTRO 4 |
| .SH NAME |
| intro \- introduction to file servers |
| .SH DESCRIPTION |
| A Plan 9 |
| .I "file server" |
| provides a file tree to processes. |
| This section of the manual describes servers that can be |
| mounted in a name space to give a file-like interface to interesting services. |
| A file server may be a provider of a conventional file system, |
| with files maintained on permanent storage, |
| or it may also be a process that synthesizes files in some manner. |
| .PP |
| In Plan 9, the kernel mount device |
| \fImnt\fR(3) |
| acts as a client to the 9P servers mounted in the current name space, |
| translating system calls such as |
| .IR open (2) |
| into 9P transactions such as |
| .IR open (9p). |
| The kernel also multiplexes the potentially many processes onto a single 9P conversation |
| with each server. |
| Finally, the kernel provides each process with its own private |
| .I name space |
| which it can customize at will. |
| Modern Unix systems do not provide these niceties, so |
| the Unix port of these Plan 9 file servers provides them via other means. |
| .PP |
| On Unix, 9P clients do not access servers via the traditional |
| file system call interface. Only the Unix name space can be accessed |
| that way. |
| Instead, 9P clients use the |
| .IR 9pclient (3) |
| library to connect and interact directly with particular 9P servers. |
| The |
| .IR 9p (1) |
| command-line client is useful for interactive use and in shell scripts. |
| .PP |
| To preserve the faรงade of a single 9P conversation with each server, |
| 9P servers invoke |
| .IR 9pserve (4), |
| typically via |
| .IR post9pservice (3). |
| .I 9pserve |
| announces a 9P service at a particular |
| network address and multiplexes the clients that connect to |
| that address onto a single 9P conversation with the server. |
| .PP |
| Each ported program operates in a pseudo-name space |
| that determines which 9P servers it is using. |
| The name space of a ported program is represented by a |
| directory containing Unix domain sockets, one for each 9P server. |
| The directory defaults to |
| .BR /tmp/ns.$USER.$DISPLAY , |
| meaning that all programs in an X Windows login session |
| share a single name space. |
| Setting the |
| .B $NAMESPACE |
| environment variable overrides this default. |
| The |
| .IR namespace (1) |
| command prints the current name space directory. |
| .PP |
| Occasionally it is useful to be able to connect the input or output |
| of a standard Unix program to a file served by a 9P server. |
| The new |
| .IR openfd (9p) |
| 9P transaction, which depends on file descriptor passing, |
| provides a sufficient workaround in many cases. |
| .IR 9pserve 's |
| implementation of |
| .I openfd |
| (see also |
| .I fsopenfd |
| in |
| .IR 9pclient (3)) |
| returns the read or write end of a pipe; |
| a helper process transfers data between the other end of the pipe |
| and the 9P server. |
| Note that since the data is being transferred via a pipe, |
| 9P read and write errors cannot be passed on to the Unix program. |
| The Unix program sees only end-of-file or a closed pipe. |