fdescfs —
file-descriptor file system
fdescfs /dev/fd fdescfs rw 0 0
The file-descriptor file system, or
fdescfs, provides access to the per-process file
descriptor namespace in the global file system namespace. The conventional
mount point is /dev/fd.
The file system's contents appear as a list of numbered files
which correspond to the open files of the process reading the directory. The
files /dev/fd/0 through
/dev/fd/# refer to file descriptors which can be
accessed through the file system.
The following mount options can be used when mounting
fdescfs filesystem:
nodup
- For file descriptors referencing vnodes, instead of the
dup(2)
semantic described above, implement re-opening of the referenced vnode.
See below for more details.
linrdlnk
- Report the type of the
fdescfs vnode as
VLNK instead of FreeBSD
traditional VCHR. For
linux(4)
ABI compatibility mount fdescfs volume with the
linrdlnk option.
rdlnk
- Treat
fdescfs vnodes as symbolic links
consistently, in particular, follow the resolved name for the name
lookups. This option is strictly stronger than the
linrdlnk option, it changes not only the type
returned by
stat(2),
but also causes the fdescfs files to behave as
symlinks.
For fdescfs mounted without the
nodup mount option, if the file descriptor is open
and the mode the file is being opened with is a subset of the mode of the
existing descriptor, the call:
fd = open("/dev/fd/0", mode);
and the call:
fd = fcntl(0, F_DUPFD, 0);
are equivalent. Flags to the
open(2)
call other than O_RDONLY,
O_WRONLY and O_RDWR are
ignored.
For fdescfs mounted with the
nodup option, and file descriptor referencing a
vnode, the call:
fd = open("/dev/fd/0", mode);
reopens the referenced vnode with the specified
mode. In other words, the
open() call
above is equivalent to
fd = openat(0, "", O_EMPTY_PATH, mode);
In particular, if the file descriptor was opened with
the O_PATH flag, then either
O_EMPTY_PATH or
open() over
fdescfs mount with nodup
option allows one to convert it to a regularly opened file, assuming that
the current permissions allow the requested mode.
Note:
/dev/fd/0, /dev/fd/1 and
/dev/fd/2 files are created by default when devfs
alone is mounted. fdescfs creates entries for all
file descriptors opened by the process.
To mount a fdescfs volume located on
/dev/fd:
mount -t fdescfs none
/dev/fd
For
linux(4)
ABI compatibility:
mount -t fdescfs -o linrdlnk none
/compat/linux/dev/fd
For substitute of O_EMPTY_PATH flag
use:
mount -t fdescfs -o nodup none
/dev/fdpath
The fdescfs file system first appeared in
4.4BSD. The fdescfs manual
page first appeared in FreeBSD 2.2.
The fdescfs manual page was written by
Mike Pritchard
<mpp@FreeBSD.org>, and
was based on the manual page written by Jan-Simon
Pendry.