123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- .TH BIND 2
- .SH NAME
- bind, mount, unmount \- change name space
- .SH SYNOPSIS
- .B #include <u.h>
- .br
- .B #include <libc.h>
- .PP
- .B
- int bind(char *name, char *old, int flag)
- .PP
- .B
- int mount(int fd, int afd, char *old, int flag, char *aname)
- .PP
- .B
- int unmount(char *name, char *old)
- .SH DESCRIPTION
- .I Bind
- and
- .I mount
- modify the file name space of the current process and other
- processes in its name space group
- (see
- .IR fork (2)).
- For both calls,
- .I old
- is the name of an existing file or directory in the
- current name space where the modification is to be made.
- The name
- .I old
- is
- .I evaluated
- as described in
- .IR intro (2),
- except that no translation of the final path element is done.
- .PP
- For
- .IR bind ,
- .I name
- is the name of another (or possibly the same)
- existing file or directory in
- the current name space.
- After a successful
- .I bind
- call, the file name
- .I old
- is an alias for the object originally named by
- .IR name ;
- if the modification doesn't hide it,
- .I name
- will also still refer to its original file.
- The evaluation of
- .I new
- happens at the time of the
- .IR bind ,
- not when the binding is later used.
- .PP
- The
- .I fd
- argument to
- .I mount
- is a file descriptor of an open network connection
- or pipe to a file server, while
- .I afd
- is a authentication file descriptor as created by
- .IR fauth (2)
- and subsequently authenticated.
- If authentication is not required,
- .I afd
- should be -1.
- The
- .I old
- file must be a directory.
- After a successful
- .I mount
- the file tree
- .I served
- (see below) by
- .I fd
- will be visible with its root directory having name
- .IR old .
- .PP
- The
- .I flag
- controls details of the modification made to the name space.
- In the following,
- .I new
- refers to the file
- as defined by
- .I name
- or the root directory served by
- .IR fd .
- Either both
- .I old
- and new files must be directories,
- or both must not be directories.
- .I Flag
- can be one of:
- .TF MBEFORE
- .TP
- .B MREPL
- Replace the
- .I old
- file by the new one.
- Henceforth, an evaluation of
- .I old
- will be translated to the new file.
- If they are directories (for
- .IR mount ,
- this condition is true by definition),
- .I old
- becomes a
- .I "union directory"
- consisting of one directory (the new file).
- .TP
- .B MBEFORE
- Both the
- .I old
- and new files must be directories.
- Add the constituent files of the new directory
- to the union directory at
- .I old
- so its contents appear first in the union.
- After an
- .B MBEFORE
- .I bind
- or
- .IR mount ,
- the new directory will be searched first when evaluating file names
- in the union directory.
- .TP
- .B MAFTER
- Like
- .B MBEFORE
- but the new directory goes at the end of the union.
- .PD
- .PP
- The flags are defined in
- .BR <libc.h> .
- In addition, there is an
- .B MCREATE
- flag that can be OR'd with any of the above.
- When a
- .I create
- system call (see
- .IR 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
- .B MCREATE
- set.
- The file is created in that directory; if that attempt fails,
- the
- .I create
- fails.
- .PP
- Finally, the
- .B MCACHE
- flag, valid for
- .I 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
- .IR read (5)
- requests for files accessible through this mount point.
- The currency of cached data for a file is verified at each
- .IR open (5)
- of the file from this client machine.
- .PP
- With
- .IR mount ,
- the file descriptor
- .I fd
- must be open for reading and writing
- and prepared to respond to 9P messages
- (see Section 5).
- After the
- .IR mount ,
- the file tree starting at
- .I old
- is served by a kernel
- .IR mnt (3)
- device.
- That device will turn operations in the tree into messages on
- .IR fd .
- .I Aname
- selects among different
- file trees on the server; the null string chooses the default tree.
- .PP
- The file descriptor
- .I fd
- is automatically closed by a successful
- .I mount
- call.
- .PP
- The effects of
- .I bind
- and
- .I mount
- can be undone by
- .IR unmount .
- If
- .I name
- is zero, everything bound to or mounted upon
- .I old
- is unbound or unmounted.
- If
- .I name
- is not zero, it is evaluated as described above for
- .IR bind ,
- and the effect of binding or mounting that particular result on
- .I old
- is undone.
- .SH SOURCE
- .B /sys/src/libc/9syscall
- .SH SEE ALSO
- .IR bind (1),
- .IR intro (2),
- .IR fcall (2),
- .IR auth (2)
- (particularly
- .BR amount ),
- .IR intro (5),
- .IR mnt (3),
- .IR srv (3)
- .SH DIAGNOSTICS
- The return value is a positive integer (a unique sequence number) for
- success, -1 for failure.
- These routines set
- .IR errstr .
- .SH BUGS
- .I Mount
- will not return until it has successfully attached
- to the file server, so the process doing a
- .I mount
- cannot be the one serving.
|