The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/file.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 1982, 1986, 1989, 1993
    3  *      The Regents of the University of California.  All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  * 3. All advertising materials mentioning features or use of this software
   14  *    must display the following acknowledgement:
   15  *      This product includes software developed by the University of
   16  *      California, Berkeley and its contributors.
   17  * 4. Neither the name of the University nor the names of its contributors
   18  *    may be used to endorse or promote products derived from this software
   19  *    without specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  *
   33  *      @(#)file.h      8.3 (Berkeley) 1/9/95
   34  * $FreeBSD: src/sys/sys/file.h,v 1.22.2.7 2002/11/21 23:39:24 sam Exp $
   35  * $DragonFly: src/sys/sys/file.h,v 1.25 2007/01/12 06:06:58 dillon Exp $
   36  */
   37 
   38 #ifndef _SYS_FILE_H_
   39 #define _SYS_FILE_H_
   40 
   41 #ifndef _SYS_TYPES_H_
   42 #include <sys/types.h>
   43 #endif
   44 #ifndef _SYS_FCNTL_H_
   45 #include <sys/fcntl.h>
   46 #endif
   47 #ifndef _SYS_UNISTD_H_
   48 #include <sys/unistd.h>
   49 #endif
   50 
   51 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
   52 
   53 #ifndef _SYS_EVENT_H_
   54 #include <sys/event.h>
   55 #endif
   56 #ifndef _SYS_QUEUE_H_
   57 #include <sys/queue.h>
   58 #endif
   59 #ifndef _SYS_SPINLOCK_H_
   60 #include <sys/spinlock.h>
   61 #endif
   62 #ifndef _SYS_NAMECACHE_H_
   63 #include <sys/namecache.h>
   64 #endif
   65 #ifndef _SYS_UIO_H_
   66 #include <sys/uio.h>
   67 #endif
   68 
   69 struct stat;
   70 struct proc;
   71 struct thread;
   72 struct uio;
   73 struct knote;
   74 struct file;
   75 struct ucred;
   76 struct vnode;
   77 struct lwkt_port;
   78 struct namecache;
   79 struct sysmsg;
   80 
   81 struct  fileops {
   82         int (*fo_read)  (struct file *fp, struct uio *uio,
   83                          struct ucred *cred, int flags);
   84         int (*fo_write) (struct file *fp, struct uio *uio,
   85                          struct ucred *cred, int flags);
   86         int (*fo_ioctl) (struct file *fp, u_long com, caddr_t data,
   87                          struct ucred *cred, struct sysmsg *msg);
   88         int (*fo_kqfilter)(struct file *fp, struct knote *kn);
   89         int (*fo_stat)  (struct file *fp, struct stat *sb,
   90                          struct ucred *cred);
   91         int (*fo_close) (struct file *fp);
   92         int (*fo_shutdown)(struct file *fp, int how);
   93 };
   94 
   95 /*
   96  * Kernel descriptor table - One entry for each open kernel vnode and socket.
   97  *
   98  * (A) - (filehead_spin) - descriptor subsystems only (kern/kern_descrip.c)
   99  * (U) - (unp_spin)      - uipc subsystems only (kern/uipc_usrreq.c)
  100  * (ro)- these fields may be read without holding a spinlock as long as you
  101  *       have (or know) that the reference to the fp is going to stay put.
  102  * ?   - remaining fields have to be spinlocked
  103  */
  104 struct file {
  105         LIST_ENTRY(file) f_list;/* (A) list of active files */
  106         short   f_FILLER3;
  107         short   f_type;         /* (ro) descriptor type */
  108         u_int   f_flag;         /* see fcntl.h */
  109         struct  ucred *f_cred;  /* (ro) creds associated with descriptor */
  110         struct  fileops *f_ops; /* (ro) operations vector */
  111         int     f_seqcount;     /*
  112                                  * count of sequential accesses -- cleared
  113                                  * by most seek operations.
  114                                  */
  115         off_t   f_nextoff;      /*
  116                                  * offset of next expected read or write
  117                                  */
  118         off_t   f_offset;
  119         void   *f_data;         /* vnode, pipe, socket, or kqueue */
  120         int     f_count;        /* reference count */
  121         int     f_msgcount;     /* (U) reference count from message queue */
  122         struct nchandle f_nchandle; /* namecache reference */
  123         struct spinlock f_spin; /* NOT USED */
  124         struct klist    f_klist;/* knotes attached to fp/kq */
  125 };
  126 
  127 #define DTYPE_VNODE     1       /* file */
  128 #define DTYPE_SOCKET    2       /* communications endpoint */
  129 #define DTYPE_PIPE      3       /* pipe */
  130 #define DTYPE_FIFO      4       /* fifo (named pipe) */
  131 #define DTYPE_KQUEUE    5       /* event queue */
  132 #define DTYPE_CRYPTO    6       /* crypto */
  133 #define DTYPE_SYSLINK   7       /* syslink */
  134 #define DTYPE_MQUEUE    8       /* message queue */
  135 
  136 LIST_HEAD(filelist, file);
  137 
  138 #endif
  139 
  140 #ifdef _KERNEL
  141 
  142 #ifdef MALLOC_DECLARE
  143 MALLOC_DECLARE(M_FILE);
  144 #endif
  145 
  146 extern void fhold(struct file *fp);
  147 extern int fdrop (struct file *fp);
  148 extern int checkfdclosed(struct filedesc *fdp, int fd, struct file *fp);
  149 extern int fp_open(const char *path, int flags, int mode, struct file **fpp);
  150 extern int fp_vpopen(struct vnode *vp, int flags, struct file **fpp);
  151 extern int fp_pread(struct file *fp, void *buf, size_t nbytes, off_t offset, ssize_t *res, enum uio_seg);
  152 extern int fp_pwrite(struct file *fp, void *buf, size_t nbytes, off_t offset, ssize_t *res, enum uio_seg);
  153 extern int fp_read(struct file *fp, void *buf, size_t nbytes, ssize_t *res, int all, enum uio_seg);
  154 extern int fp_write(struct file *fp, void *buf, size_t nbytes, ssize_t *res, enum uio_seg);
  155 extern int fp_stat(struct file *fp, struct stat *ub);
  156 extern int fp_mmap(void *addr, size_t size, int prot, int flags, struct file *fp, off_t pos, void **resp);
  157 
  158 extern int nofo_shutdown(struct file *fp, int how);
  159 
  160 extern int fp_close(struct file *fp);
  161 extern int fp_shutdown(struct file *fp, int how);
  162 
  163 extern struct fileops vnode_fileops;
  164 extern struct fileops specvnode_fileops;
  165 extern struct fileops badfileops;
  166 extern int maxfiles;            /* kernel limit on number of open files */
  167 extern int maxfilesrootres;     /* descriptors reserved for root use */
  168 extern int minfilesperproc;     /* minimum (safety) open files per proc */
  169 extern int maxfilesperproc;     /* per process limit on number of open files */
  170 extern int maxfilesperuser;     /* per user limit on number of open files */
  171 
  172 /* Commonly used fileops */
  173 int badfo_readwrite(struct file *fp, struct uio *uio,
  174                     struct ucred *cred, int flags);
  175 int badfo_ioctl(struct file *fp, u_long com, caddr_t data,
  176                 struct ucred *cred, struct sysmsg *msg);
  177 int badfo_kqfilter(struct file *fp, struct knote *kn);
  178 int badfo_stat(struct file *fp, struct stat *sb, struct ucred *cred);
  179 int badfo_close(struct file *fp);
  180 int badfo_shutdown(struct file *fp, int how);
  181 
  182 #endif /* _KERNEL */
  183 
  184 #endif /* !SYS_FILE_H */

Cache object: 3855f0d3802f7d3cfa68dd348df4a53b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.