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 /*      $NetBSD: file.h,v 1.88 2021/09/19 15:51:27 thorpej Exp $        */
    2 
    3 /*-
    4  * Copyright (c) 2009 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Andrew Doran.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  * POSSIBILITY OF SUCH DAMAGE.
   30  */
   31 
   32 /*
   33  * Copyright (c) 1982, 1986, 1989, 1993
   34  *      The Regents of the University of California.  All rights reserved.
   35  *
   36  * Redistribution and use in source and binary forms, with or without
   37  * modification, are permitted provided that the following conditions
   38  * are met:
   39  * 1. Redistributions of source code must retain the above copyright
   40  *    notice, this list of conditions and the following disclaimer.
   41  * 2. Redistributions in binary form must reproduce the above copyright
   42  *    notice, this list of conditions and the following disclaimer in the
   43  *    documentation and/or other materials provided with the distribution.
   44  * 3. Neither the name of the University nor the names of its contributors
   45  *    may be used to endorse or promote products derived from this software
   46  *    without specific prior written permission.
   47  *
   48  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   49  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   50  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   51  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   52  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   53  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   54  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   55  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   56  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   57  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   58  * SUCH DAMAGE.
   59  *
   60  *      @(#)file.h      8.3 (Berkeley) 1/9/95
   61  */
   62 
   63 #ifndef _SYS_FILE_H_
   64 #define _SYS_FILE_H_
   65 
   66 #include <sys/fcntl.h>
   67 #include <sys/unistd.h>
   68 
   69 #if defined(_KERNEL) || defined(_KMEMUSER)
   70 #include <sys/queue.h>
   71 #include <sys/mutex.h>
   72 #include <sys/condvar.h>
   73 
   74 struct proc;
   75 struct lwp;
   76 struct uio;
   77 struct iovec;
   78 struct stat;
   79 struct knote;
   80 struct uvm_object;
   81 
   82 struct fileops {
   83         const char *fo_name;
   84         int     (*fo_read)      (struct file *, off_t *, struct uio *,
   85                                     kauth_cred_t, int);
   86         int     (*fo_write)     (struct file *, off_t *, struct uio *,
   87                                     kauth_cred_t, int);
   88         int     (*fo_ioctl)     (struct file *, u_long, void *);
   89         int     (*fo_fcntl)     (struct file *, u_int, void *);
   90         int     (*fo_poll)      (struct file *, int);
   91         int     (*fo_stat)      (struct file *, struct stat *);
   92         int     (*fo_close)     (struct file *);
   93         int     (*fo_kqfilter)  (struct file *, struct knote *);
   94         void    (*fo_restart)   (struct file *);
   95         int     (*fo_mmap)      (struct file *, off_t *, size_t, int, int *,
   96                                  int *, struct uvm_object **, int *);
   97         int     (*fo_seek)      (struct file *, off_t, int, off_t *, int);
   98 };
   99 
  100 union file_data {
  101         struct vnode *fd_vp;            // DTYPE_VNODE
  102         struct socket *fd_so;           // DTYPE_SOCKET
  103         struct pipe *fd_pipe;           // DTYPE_PIPE
  104         struct kqueue *fd_kq;           // DTYPE_KQUEUE
  105         struct eventfd *fd_eventfd;     // DTYPE_EVENTFD
  106         struct timerfd *fd_timerfd;     // DTYPE_TIMERFD
  107         void *fd_data;                  // DTYPE_MISC
  108         struct audio_file *fd_audioctx; // DTYPE_MISC (audio)
  109         struct pad_softc *fd_pad;       // DTYPE_MISC (pad)
  110         int fd_devunit;                 // DTYPE_MISC (tap)
  111         struct bpf_d *fd_bpf;           // DTYPE_MISC (bpf)
  112         struct fcrypt *fd_fcrypt;       // DTYPE_CRYPTO is not used
  113         struct mqueue *fd_mq;           // DTYPE_MQUEUE
  114         struct ksem *fd_ks;             // DTYPE_SEM
  115         struct iscsifd *fd_iscsi;       // DTYPE_MISC (iscsi)
  116 };
  117 
  118 /*
  119  * Kernel file descriptor.  One entry for each open kernel vnode and
  120  * socket.
  121  *
  122  * This structure is exported via the KERN_FILE sysctl.
  123  * Only add members to the end, do not delete them.
  124  *
  125  * Note: new code should not use KERN_FILE; use KERN_FILE2 instead,
  126  * which exports struct kinfo_file instead; struct kinfo_file is
  127  * declared in sys/sysctl.h and is meant to be ABI-stable.
  128  */
  129 struct file {
  130         off_t           f_offset;       /* first, is 64-bit */
  131         kauth_cred_t    f_cred;         /* creds associated with descriptor */
  132         const struct fileops *f_ops;
  133         union file_data f_undata;       /* descriptor data, e.g. vnode/socket */
  134         LIST_ENTRY(file) f_list;        /* list of active files */
  135         kmutex_t        f_lock;         /* lock on structure */
  136         int             f_flag;         /* see fcntl.h */
  137         u_int           f_marker;       /* traversal marker (sysctl) */
  138         u_int           f_type;         /* descriptor type */
  139         u_int           f_advice;       /* access pattern hint; UVM_ADV_* */
  140         u_int           f_count;        /* reference count */
  141         u_int           f_msgcount;     /* references from message queue */
  142         u_int           f_unpcount;     /* deferred close: see uipc_usrreq.c */
  143         SLIST_ENTRY(file) f_unplist;    /* deferred close: see uipc_usrreq.c */
  144 };
  145 
  146 #define f_vnode         f_undata.fd_vp
  147 #define f_socket        f_undata.fd_so
  148 #define f_pipe          f_undata.fd_pipe
  149 #define f_kqueue        f_undata.fd_kq
  150 #define f_data          f_undata.fd_data
  151 #define f_mqueue        f_undata.fd_mq
  152 #define f_ksem          f_undata.fd_ks
  153 #define f_eventfd       f_undata.fd_eventfd
  154 #define f_timerfd       f_undata.fd_timerfd
  155 
  156 #define f_rndctx        f_undata.fd_rndctx
  157 #define f_audioctx      f_undata.fd_audioctx
  158 #define f_pad           f_undata.fd_pad
  159 #define f_devunit       f_undata.fd_devunit
  160 #define f_bpf           f_undata.fd_bpf
  161 #define f_fcrypt        f_undata.fd_fcrypt
  162 #define f_iscsi         f_undata.fd_iscsi
  163 #endif /* _KERNEL || _KMEMUSER */
  164 
  165 /*
  166  * Descriptor types.
  167  */
  168 
  169 #define DTYPE_VNODE     1               /* file */
  170 #define DTYPE_SOCKET    2               /* communications endpoint */
  171 #define DTYPE_PIPE      3               /* pipe */
  172 #define DTYPE_KQUEUE    4               /* event queue */
  173 #define DTYPE_MISC      5               /* misc file descriptor type */
  174 #define DTYPE_CRYPTO    6               /* crypto */
  175 #define DTYPE_MQUEUE    7               /* message queue */
  176 #define DTYPE_SEM       8               /* semaphore */
  177 #define DTYPE_EVENTFD   9               /* eventfd */
  178 #define DTYPE_TIMERFD   10              /* timerfd */
  179 
  180 #define DTYPE_NAMES     \
  181     "", "file", "socket", "pipe", "kqueue", "misc", "crypto", "mqueue", \
  182     "semaphore", "eventfd", "timerfd"
  183 
  184 #ifdef _KERNEL
  185 
  186 /*
  187  * Flags for fo_read and fo_write and do_fileread/write/v
  188  */
  189 #define FOF_UPDATE_OFFSET       0x0001  /* update the file offset */
  190 #define FOF_IOV_SYSSPACE        0x0100  /* iov structure in kernel memory */
  191 
  192 LIST_HEAD(filelist, file);
  193 extern struct filelist  filehead;       /* head of list of open files */
  194 extern u_int            maxfiles;       /* kernel limit on # of open files */
  195 
  196 extern const struct fileops vnops;      /* vnode operations for files */
  197 
  198 int     dofileread(int, struct file *, void *, size_t,
  199             off_t *, int, register_t *);
  200 int     dofilewrite(int, struct file *, const void *,
  201             size_t, off_t *, int, register_t *);
  202 
  203 int     do_filereadv(int, const struct iovec *, int, off_t *,
  204             int, register_t *);
  205 int     do_filewritev(int, const struct iovec *, int, off_t *,
  206             int, register_t *);
  207 
  208 int     fsetown(pid_t *, u_long, const void *);
  209 int     fgetown(pid_t, u_long, void *);
  210 void    fownsignal(pid_t, int, int, int, void *);
  211 
  212 /* Commonly used fileops */
  213 int     fnullop_fcntl(struct file *, u_int, void *);
  214 int     fnullop_poll(struct file *, int);
  215 int     fnullop_kqfilter(struct file *, struct knote *);
  216 int     fbadop_read(struct file *, off_t *, struct uio *, kauth_cred_t, int);
  217 int     fbadop_write(struct file *, off_t *, struct uio *, kauth_cred_t, int);
  218 int     fbadop_ioctl(struct file *, u_long, void *);
  219 int     fbadop_close(struct file *);
  220 int     fbadop_stat(struct file *, struct stat *);
  221 void    fnullop_restart(struct file *);
  222 
  223 #endif /* _KERNEL */
  224 
  225 #endif /* _SYS_FILE_H_ */

Cache object: 1c587dec461c938b5cb34cdc06467dbe


[ 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.