FILEDESC(9) | Kernel Developer's Manual | FILEDESC(9) |
filedesc
, dupfdopen
,
falloc
, fd_getfile
,
fdalloc
, fdcheckstd
,
fdclear
, fdclone
,
fdcloseexec
, fdcopy
,
fdexpand
, fdfree
,
fdinit
, fdrelease
,
fdremove
, fdshare
,
fdunshare
—
#include <sys/file.h>
#include <sys/filedesc.h>
int
falloc
(struct
lwp *l, struct file
**resultfp, int
*resultfd);
struct file *
fd_getfile
(struct
filedesc *fdp, int
fd);
int
dupfdopen
(struct
lwp *l, int indx,
int dfd,
int mode,
int error);
int
fdalloc
(struct
proc *p, int want,
int *result);
int
fdcheckstd
(struct
lwp *l);
void
fdclear
(struct
lwp *l);
int
fdclone
(struct
lwp *l, struct file
*fp, int fd,
int flag,
const struct fileops
*fops, void
*data);
void
fdcloseexec
(struct
lwp *l);
struct filedesc *
fdcopy
(struct
proc *p);
void
fdexpand
(struct
proc *p);
void
fdfree
(struct
lwp *l);
struct filedesc *
fdinit
(struct
proc *p);
int
fdrelease
(struct
lwp *l, int
fd);
void
fdremove
(struct
filedesc *fdp, int
fd);
void
fdshare
(struct
proc *p1, struct proc
*p2);
void
fdunshare
(struct
lwp *l);
The kernel maintains a descriptor table for each process which is used to translate the external representation of a file descriptor into an internal representation. The file descriptor is merely an index into this table. The file descriptor table maintains the following information:
On creation of the file descriptor table, a fixed number of file entries are created. It is the responsibility of the file descriptor operations to expand the available number of entries if more are required. Each file entry in the descriptor table contains the information necessary to access the underlying object and to maintain common information. See file(9) for details of operations on the file entries.
New file descriptors are generally allocated by
falloc
() and freed by
fdrelease
(). File entries are extracted from the
file descriptor table by fd_getfile
(). Most of the
remaining functions in the interface are purpose specific and perform
lower-level file descriptor operations.
falloc
(p,
*resultfp, *resultfd)fdalloc
() to allocate the new file descriptor. The
credential on the file entry are inherited from process
p. The falloc
() function is
responsible for expanding the file descriptor table when necessary.
A pointer to the file entry is returned in
*resultfp and the file descriptor is returned in
*resultfd. The falloc
()
function returns zero on success, otherwise an appropriate error is
returned.
fd_getfile
(fdp,
fd)NULL
is returned.dupfdopen
(l,
indx, dfd,
mode, error)The following functions operate on the file descriptor table for a process.
fdalloc
(p,
want, *result)fdalloc
()
function returns zero on success, otherwise an appropriate error is
returned.fdcheckstd
(l)fdclear
(l)fdinit
() to initialise a
new file descriptor table to replace the old file descriptor table and
invoking fdfree
() to release the old one.fdclone
(l,
fp, fd,
flag, fops,
data)fdclone
() fills
fp with the given parameters. It always returns the
in-kernel errno value EMOVEFD
, which is meant to
be returned from the device open routine. This special return value is
interpreted by the caller of the device open routine.fdcloseexec
(l)fdunshare
() for the process and invoking
fdrelease
() on the appropriate file
descriptor.fdcopy
(p)fdexpand
(p)fdfree
(l)fdinit
(p)fdrelease
(l,
fd)closef
().fdremove
(fdp,
fd)fdshare
(p1,
p2)fdunshare
(l)fdcopy
().
The reference count on the original file descriptor table is
decremented.EBADF
]EMFILE
]ENOSPC
]July 24, 2006 | NetBSD 8.99 |