Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

bind(1)

intro(2)

fcall(2)

auth(2)

intro(5)

mnt(3)

srv(3)

BIND(2)

NAME

bind, mount, unmount − change name space

SYNOPSIS

­#include <u.h>
­#include <libc.h>

int bind(char ∗name, char ∗old, int flag)

int mount(int fd, int afd, char ∗old, int flag, char ∗aname)

int unmount(char ∗name, char ∗old)

DESCRIPTION

­Bind and ­mount modify the file name space of the current process and other processes in its name space group (see fork(2)). For both calls, ­old is the name of an existing file or directory in the current name space where the modification is to be made.  The name ­old is ­evaluated as described in intro(2), except that no translation of the final path element is done.

For bind, ­name is the name of another (or possibly the same) existing file or directory in the current name space.  After a successful ­bind call, the file name ­old is an alias for the object originally named by name; if the modification doesn’t hide it, ­name will also still refer to its original file.  The evaluation of ­new happens at the time of the bind, not when the binding is later used.

The ­fd argument to ­mount is a file descriptor of an open network connection or pipe to a file server, while ­afd is a authentication file descriptor as created by fauth(2) and subsequently authenticated. If authentication is not required, ­afd should be -1.  The ­old file must be a directory.  After a successful ­mount the file tree ­served (see below) by ­fd will be visible with its root directory having name old.

The ­flag controls details of the modification made to the name space.  In the following, ­new refers to the file as defined by ­name or the root directory served by fd. Either both ­old and new files must be directories, or both must not be directories.  ­Flag can be one of:

­MREPL Replace the ­old file by the new one.  Henceforth, an evaluation of ­old will be translated to the new file.  If they are directories (for mount, this condition is true by definition), ­old becomes a ­union directory consisting of one directory (the new file). 

­MBEFORE Both the ­old and new files must be directories.  Add the constituent files of the new directory to the union directory at ­old so its contents appear first in the union.  After an ­MBEFORE ­bind or mount, the new directory will be searched first when evaluating file names in the union directory.

­MAFTER Like ­MBEFORE but the new directory goes at the end of the union. 

The flags are defined in <libc.h>.  In addition, there is an ­MCREATE flag that can be OR’d with any of the above.  When a ­create system call (see open(2)) attempts to create in a union directory, and the file does not exist, the elements of the union are searched in order until one is found with ­MCREATE set.  The file is created in that directory; if that attempt fails, the ­create fails. 

Finally, the ­MCACHE flag, valid for ­mount only, turns on caching for files made available by the mount.  By default, file contents are always retrieved from the server.  With caching enabled, the kernel may instead use a local cache to satisfy read(5) requests for files accessible through this mount point. The currency of cached data for a file is verified at each open(5) of the file from this client machine.

With mount, the file descriptor ­fd must be open for reading and writing and prepared to respond to 9P messages (see Section 5).  After the mount, the file tree starting at ­old is served by a kernel mnt(3) device. That device will turn operations in the tree into messages on fd. ­Aname selects among different file trees on the server; the null string chooses the default tree. 

The file descriptor ­fd is automatically closed by a successful ­mount call. 

The effects of ­bind and ­mount can be undone by unmount. If ­name is zero, everything bound to or mounted upon ­old is unbound or unmounted.  If ­name is not zero, it is evaluated as described above for bind, and the effect of binding or mounting that particular result on ­old is undone. 

SOURCE

­/sys/src/libc/9syscall

SEE ALSO

bind(1), intro(2), fcall(2), auth(2) (particularly amount), intro(5), mnt(3), srv(3)

DIAGNOSTICS

The return value is a positive integer (a unique sequence number) for success, -1 for failure.  These routines set errstr.

BUGS

­Mount will not return until it has successfully attached to the file server, so the process doing a ­mount cannot be the one serving. 

Plan 9  —  March 02, 2002

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026