darwin-xnu/bsd/sys/file_internal.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
   3 *
   4 * @APPLE_LICENSE_HEADER_START@
   5 * 
   6 * The contents of this file constitute Original Code as defined in and
   7 * are subject to the Apple Public Source License Version 1.1 (the
   8 * "License").  You may not use this file except in compliance with the
   9 * License.  Please obtain a copy of the License at
  10 * http://www.apple.com/publicsource and read it before using this file.
  11 * 
  12 * This Original Code and all software distributed under the License are
  13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17 * License for the specific language governing rights and limitations
  18 * under the License.
  19 * 
  20 * @APPLE_LICENSE_HEADER_END@
  21 */
  22/* Copyright (c) 1995, 1997 Apple Computer, Inc. All Rights Reserved */
  23/*
  24 * Copyright (c) 1982, 1986, 1989, 1993
  25 *      The Regents of the University of California.  All rights reserved.
  26 *
  27 * Redistribution and use in source and binary forms, with or without
  28 * modification, are permitted provided that the following conditions
  29 * are met:
  30 * 1. Redistributions of source code must retain the above copyright
  31 *    notice, this list of conditions and the following disclaimer.
  32 * 2. Redistributions in binary form must reproduce the above copyright
  33 *    notice, this list of conditions and the following disclaimer in the
  34 *    documentation and/or other materials provided with the distribution.
  35 * 3. All advertising materials mentioning features or use of this software
  36 *    must display the following acknowledgement:
  37 *      This product includes software developed by the University of
  38 *      California, Berkeley and its contributors.
  39 * 4. Neither the name of the University nor the names of its contributors
  40 *    may be used to endorse or promote products derived from this software
  41 *    without specific prior written permission.
  42 *
  43 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  44 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  45 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  46 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  47 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  48 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  49 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  50 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  51 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  52 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  53 * SUCH DAMAGE.
  54 *
  55 *      @(#)file.h      8.3 (Berkeley) 1/9/95
  56 */
  57
  58#ifndef _SYS_FILE_INTERNAL_H_
  59#define _SYS_FILE_INTERNAL_H_
  60
  61#include <sys/appleapiopts.h>
  62#include <sys/fcntl.h>
  63#include <sys/unistd.h>
  64
  65#ifdef KERNEL
  66#include <sys/errno.h>
  67#include <sys/queue.h>
  68#include <sys/cdefs.h>
  69#include <sys/lock.h>
  70#include <sys/file.h>
  71
  72struct proc;
  73struct uio;
  74struct knote;
  75#ifdef __APPLE_API_UNSTABLE
  76
  77struct file;
  78
  79
  80/*
  81 * Kernel descriptor table.
  82 * One entry for each open kernel vnode and socket.
  83 */
  84struct fileproc {
  85        int32_t f_flags;
  86        int32_t f_iocount;
  87        struct fileglob * f_fglob;
  88        void *  f_waddr;
  89};
  90
  91#define FILEPROC_NULL (struct fileproc *)0
  92
  93#define FP_INCREATE     0x0001
  94#define FP_INCLOSE      0x0002
  95#define FP_INSELECT     0x0004
  96#define FP_INCHRREAD    0x0008
  97#define FP_WRITTEN      0x0010
  98#define FP_CLOSING      0x0020
  99#define FP_WAITCLOSE    0x0040
 100#define FP_AIOISSUED    0x0080
 101#define FP_WAITEVENT    0x0100
 102
 103
 104/* defns of close_internal */
 105#define CLOSEINT_LOCKED     1
 106#define CLOSEINT_WAITONCLOSE 2
 107#define CLOSEINT_NOFDRELSE  4
 108#define CLOSEINT_NOFDNOREF  8
 109
 110struct fileglob {
 111        LIST_ENTRY(fileglob) f_list;/* list of active files */
 112        LIST_ENTRY(fileglob) f_msglist;/* list of active files */
 113        int32_t fg_flag;                /* see fcntl.h */
 114        int32_t fg_type;                /* descriptor type */
 115        int32_t fg_count;       /* reference count */
 116        int32_t fg_msgcount;    /* references from message queue */
 117        struct  ucred *fg_cred; /* credentials associated with descriptor */
 118        struct  fileops {
 119                int     (*fo_read)      __P((struct fileproc *fp, struct uio *uio,
 120                                            struct ucred *cred, int flags,
 121                                            struct proc *p));
 122                int     (*fo_write)     __P((struct fileproc *fp, struct uio *uio,
 123                                            struct ucred *cred, int flags,
 124                                            struct proc *p));
 125#define FOF_OFFSET      0x00000001      /* offset supplied to vn_write */
 126#define FOF_PCRED       0x00000002      /* cred from proc, not current thread */
 127                int     (*fo_ioctl)     __P((struct fileproc *fp, u_long com,
 128                                            caddr_t data, struct proc *p));
 129                int     (*fo_select)    __P((struct fileproc *fp, int which,
 130                                                void *wql, struct proc *p));
 131                int     (*fo_close)     __P((struct fileglob *fg, struct proc *p));
 132                int     (*fo_kqfilter)  __P((struct fileproc *fp, struct knote *kn,
 133                                             struct proc *p));
 134                int     (*fo_drain)     (struct fileproc *fp, struct proc *p);
 135        } *fg_ops;
 136        off_t   fg_offset;
 137        caddr_t fg_data;                /* vnode or socket or SHM or semaphore */
 138        lck_mtx_t fg_lock;
 139        int32_t fg_lflags;              /* file global flags */
 140        unsigned int fg_lockpc[4];
 141        unsigned int fg_unlockpc[4];
 142};
 143
 144/* file types */
 145#define DTYPE_VNODE     1       /* file */
 146#define DTYPE_SOCKET    2       /* communications endpoint */
 147#define DTYPE_PSXSHM    3       /* POSIX Shared memory */
 148#define DTYPE_PSXSEM    4       /* POSIX Semaphores */
 149#define DTYPE_KQUEUE    5       /* kqueue */
 150#define DTYPE_PIPE      6       /* pipe */
 151#define DTYPE_FSEVENTS  7       /* fsevents */
 152
 153/* defines for fg_lflags */
 154#define FG_TERM         0x01    /* the fileglob is terminating .. */
 155#define FG_INSMSGQ      0x02    /* insert to msgqueue pending .. */
 156#define FG_WINSMSGQ     0x04    /* wait for the fielglob is in msgque */
 157#define FG_RMMSGQ       0x08    /* the fileglob is being removed from msgqueue */
 158#define FG_WRMMSGQ      0x10    /* wait for the fileglob to  be removed from msgqueue */
 159
 160
 161#ifdef __APPLE_API_PRIVATE
 162LIST_HEAD(filelist, fileglob);
 163LIST_HEAD(fmsglist, fileglob);
 164extern struct filelist filehead;        /* head of list of open files */
 165extern struct fmsglist fmsghead;        /* head of list of open files */
 166extern int maxfiles;                    /* kernel limit on number of open files */
 167extern int nfiles;                      /* actual number of open files */
 168#endif /* __APPLE_API_PRIVATE */
 169
 170
 171__BEGIN_DECLS
 172int fo_read(struct fileproc *fp, struct uio *uio,
 173        struct ucred *cred, int flags, struct proc *p);
 174int fo_write(struct fileproc *fp, struct uio *uio,
 175        struct ucred *cred, int flags, struct proc *p);
 176int fo_ioctl(struct fileproc *fp, u_long com, caddr_t data,
 177        struct proc *p);
 178int fo_select(struct fileproc *fp, int which, void *wql,
 179        struct proc *p);
 180int fo_close(struct fileglob *fg, struct proc *p);
 181int fo_kqfilter(struct fileproc *fp, struct knote *kn,
 182        struct proc *p);
 183void fileproc_drain(proc_t, struct fileproc *);
 184void fp_setflags(proc_t, struct fileproc *, int);
 185void fp_clearflags(proc_t, struct fileproc *, int);
 186int fp_drop(struct proc *p, int fd, struct fileproc *fp, int locked);
 187int fp_drop_written(proc_t p, int fd, struct fileproc *fp);
 188int fp_drop_event(proc_t p, int fd, struct fileproc *fp);
 189int fp_free(struct proc * p, int fd, struct fileproc * fp);
 190struct kqueue;
 191int fp_getfkq(struct proc *p, int fd, struct fileproc **resultfp, struct kqueue  **resultkq);
 192struct psemnode;
 193int fp_getfpsem(struct proc *p, int fd, struct fileproc **resultfp, struct psemnode  **resultpsem);
 194struct vnode;
 195int fp_getfvp(struct proc *p, int fd, struct fileproc **resultfp, struct vnode  **resultvp);
 196struct socket;
 197int fp_getfsock(struct proc *p, int fd, struct fileproc **resultfp, struct socket  **results);
 198int fp_lookup(struct proc *p, int fd, struct fileproc **resultfp, int locked);
 199int close_internal(struct proc *p, int fd, struct fileproc *fp, int flags);
 200int closef_locked(struct fileproc *fp, struct fileglob *fg, struct proc *p);
 201void fg_insertuipc(struct fileglob * fg);
 202void fg_removeuipc(struct fileglob * fg);
 203__END_DECLS
 204
 205#endif /* __APPLE_API_UNSTABLE */
 206
 207#endif /* KERNEL */
 208
 209#endif /* !_SYS_FILE_INTERNAL_H_ */
 210
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.