<head>
<title>intro(4) - Plan 9 from User Space</title>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
</head>
<body bgcolor=#ffffff>
<table border=0 cellpadding=0 cellspacing=0 width=100%>
<tr height=10><td>
<tr><td width=20><td>
<tr><td width=20><td><b>INTRO(4)</b><td align=right><b>INTRO(4)</b>
<tr><td width=20><td colspan=2>
    <br>
<p><font size=+1><b>NAME     </b></font><br>

<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>

    intro &ndash; introduction to file servers<br>
    
</table>
<p><font size=+1><b>DESCRIPTION     </b></font><br>

<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>

    A Plan 9 <i>file server</i> 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. 
    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
    
    In Plan 9, the kernel mount device <i>mnt</i>(3) acts as a client to
    the 9P servers mounted in the current name space, translating
    system calls such as <a href="../man2/open.html"><i>open</i>(2)</a> into 9P transactions such as <i>open</i>(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</i> 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. 
    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
    
    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 <a href="../man3/9pclient.html"><i>9pclient</i>(3)</a> library to connect
    and interact directly with particular 9P servers. The <a href="../man1/9p.html"><i>9p</i>(1)</a> command-line
    client is useful for interactive use and in shell
    scripts. 
    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
    
    To preserve the fa&ccedil;ade of a single 9P conversation with each server,
    9P servers invoke <a href="../man4/9pserve.html"><i>9pserve</i>(4)</a>, typically via <a href="../man3/post9pservice.html"><i>post9pservice</i>(3)</a>.
    <i>9pserve</i> 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. 
    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
    
    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 <tt><font size=+1>/tmp/ns.$USER.$DISPLAY</font></tt>,
    meaning that all programs in an X
    Windows login session share a single name space. Setting the <tt><font size=+1>$NAMESPACE</font></tt>
    environment variable overrides this default. The <a href="../man1/namespace.html"><i>namespace</i>(1)</a>
    command prints the current name space directory. 
    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
    
    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 <i>openfd</i>(9p) 9P transaction, which depends on file descriptor
    passing, provides a sufficient workaround in many cases. <i>9pserve</i>&#8217;s
    implementation of <i>openfd</i> (see also <i>fsopenfd</i> in
    <a href="../man3/9pclient.html"><i>9pclient</i>(3)</a>) 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.
    
</table>

<td width=20>
<tr height=20><td>
</table>
<!-- TRAILER -->
<table border=0 cellpadding=0 cellspacing=0 width=100%>
<tr height=15><td width=10><td><td width=10>
<tr><td><td>
<center>
<a href="../../"><img src="../../dist/spaceglenda100.png" alt="Space Glenda" border=1></a>
</center>
</table>
<!-- TRAILER -->
</body></html>
