|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1990 The Regents of the University of California. ! 3: * 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: * @(#)filedesc.h 7.4 (Berkeley) 5/4/91 ! 34: */ ! 35: ! 36: /* ! 37: * This structure is used for the management of descriptors. It may be ! 38: * shared by multiple processes. ! 39: * ! 40: * A process is initially started out with NDFILE descriptors stored within ! 41: * this structure, selected to be enough for typical applications based on ! 42: * the historical limit of 20 open files (and the usage of descriptors by ! 43: * shells). If these descriptors are exhausted, a larger descriptor table ! 44: * may be allocated, up to a process' resource limit; the internal arrays ! 45: * are then unused. The initial expansion is set to NDEXTENT; each time ! 46: * it runs out, it is doubled until the resource limit is reached. NDEXTENT ! 47: * should be selected to be the biggest multiple of OFILESIZE (see below) ! 48: * that will fit in a power-of-two sized piece of memory. ! 49: */ ! 50: #define NDFILE 20 ! 51: #define NDEXTENT 50 /* 250 bytes in 256-byte alloc. */ ! 52: ! 53: struct filedesc { ! 54: struct file **fd_ofiles; /* file structures for open files */ ! 55: char *fd_ofileflags; /* per-process open file flags */ ! 56: struct vnode *fd_cdir; /* current directory */ ! 57: struct vnode *fd_rdir; /* root directory */ ! 58: int fd_nfiles; /* number of open files allocated */ ! 59: u_short fd_lastfile; /* high-water mark of fd_ofiles */ ! 60: u_short fd_freefile; /* approx. next free file */ ! 61: u_short fd_cmask; /* mask for file creation */ ! 62: u_short fd_refcnt; /* reference count */ ! 63: }; ! 64: ! 65: /* ! 66: * Basic allocation of descriptors: ! 67: * one of the above, plus arrays for NDFILE descriptors. ! 68: */ ! 69: struct filedesc0 { ! 70: struct filedesc fd_fd; ! 71: /* ! 72: * These arrays are used when the number of open files is ! 73: * <= NDFILE, and are then pointed to by the pointers above. ! 74: */ ! 75: struct file *fd_dfiles[NDFILE]; ! 76: char fd_dfileflags[NDFILE]; ! 77: }; ! 78: ! 79: /* ! 80: * Per-process open flags. ! 81: */ ! 82: #define UF_EXCLOSE 0x01 /* auto-close on exec */ ! 83: #define UF_MAPPED 0x02 /* mapped from device */ ! 84: ! 85: /* ! 86: * Storage required per open file descriptor. ! 87: */ ! 88: #define OFILESIZE (sizeof(struct file *) + sizeof(char)) ! 89: ! 90: #ifdef KERNEL ! 91: /* ! 92: * Kernel global variables and routines. ! 93: */ ! 94: int fdalloc __P((struct proc *p, int want, int *result)); ! 95: int fdavail __P((struct proc *p, int n)); ! 96: int falloc __P((struct proc *p, struct file **resultfp, int *resultfd)); ! 97: struct filedesc *fdcopy __P((struct proc *p)); ! 98: void fdfree __P((struct proc *p)); ! 99: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.