MirOS Manual: falloc(9), fdrelease(9), fd_getfile(9), file(9), FREF(9), FRELE(9), getsock(9), getvnode(9)

FILE(9)                       BSD Kernel Manual                        FILE(9)

NAME

     file - an overview of file descriptor handling

SYNOPSIS

     #include <sys/file.h>
     #include <sys/filedesc.h>

     int
     falloc(struct proc *p, struct file **resultfp, int *resultfd);

     int
     fdrelease(struct proc *p, int fd);

     void
     FREF(struct file *fp);

     void
     FRELE(struct file *fp);

     struct file *
     fd_getfile(struct filedesc *fdp, int fd);

     int
     getvnode(struct filedesc *fdp, int fd, struct file **fpp);

     int
     getsock(struct filedesc *fdp, int fd, struct file **fpp);

DESCRIPTION

     These functions provide the interface for the UNIX file descriptors. File
     descriptors can be used to access vnodes (see vnode(9)), sockets (see
     socket(2)), pipes (see pipe(2)), kqueues (see kqueue(2)), and various
     special purpose communication endpoints.

     A new file descriptor is allocated with the function falloc() and freed
     with fdrelease(). falloc() and fdrelease() deal with allocating and free-
     ing slots in the file descriptor table, expanding the table when neces-
     sary and initializing the descriptor. It's possible to do those things in
     smaller steps, but it's not recommended to make complicated kernel APIs
     that require it.

     The files are extracted from the file descriptor table using the func-
     tions fd_getfile(), getvnode() and getsock(). fd_getfile() performs all
     necessary checks to see if the file descriptor number is within the range
     of file descriptor table, and if the descriptor is valid. getsock() and
     getvnode() are special cases that besides doing fd_getfile() also check
     if the descriptor is a vnode or socket, return the proper errno on error
     and increase the use count with FREF().

CONCURRENT ACCESS

     Since multiple processes can share the same file descriptor table, it's
     important that the file is not freed in one process while some other pro-
     cess is still accessing it. To solve that problem a special use count is
     kept with the functions FREF() and FRELE(). In most cases FREF() should
     be used on a file after it has been extracted from the file descriptor
     table and FRELE() should be called when the file won't be used anymore.
     There are cases when this isn't necessary, but since FREF() and FRELE()
     are cheap to use, there is no reason to risk introducing bugs by not us-
     ing them.

SEE ALSO

     vnode(9)

CODE REFERENCES

     The majority of those functions are implemented in
     sys/kern/kern_descrip.c. The function prototypes and the macros are lo-
     cated in sys/sys/file.h and sys/sys/filedesc.h.

MirOS BSD #10-current          August 23, 2002                               1

Generated on 2014-07-04 21:17:45 by $MirOS: src/scripts/roff2htm,v 1.79 2014/02/10 00:36:11 tg Exp $

These manual pages and other documentation are copyrighted by their respective writers; their source is available at our CVSweb, AnonCVS, and other mirrors. The rest is Copyright © 2002‒2014 The MirOS Project, Germany.
This product includes material provided by Thorsten Glaser.

This manual page’s HTML representation is supposed to be valid XHTML/1.1; if not, please send a bug report – diffs preferred.