|
|
1.1 root 1: /*
2: * Copyright (c) 2000 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) 1990, 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: * @(#)filedesc.h 8.1 (Berkeley) 6/2/93
56: */
57:
58: #ifndef _SYS_FILEDESC_H_
59: #define _SYS_FILEDESC_H_
60:
61: /*
62: * This structure is used for the management of descriptors. It may be
63: * shared by multiple processes.
64: *
65: * A process is initially started out with NDFILE descriptors [XXXstored within
66: * this structureXXX], selected to be enough for typical applications based on
67: * the historical limit of 20 open files (and the usage of descriptors by
68: * shells). If these descriptors are exhausted, a larger descriptor table
69: * may be allocated, up to a process' resource limit; [XXXthe internal arrays
70: * are then unusedXXX]. The initial expansion is set to NDEXTENT; each time
71: * it runs out, it is doubled until the resource limit is reached. NDEXTENT
72: * should be selected to be the biggest multiple of OFILESIZE (see below)
73: * that will fit in a power-of-two sized piece of memory.
74: */
75: #define NDFILE 25 /* 125 bytes */
76: #define NDEXTENT 50 /* 250 bytes in 256-byte alloc. */
77:
78: struct filedesc {
79: struct file **fd_ofiles; /* file structures for open files */
80: char *fd_ofileflags; /* per-process open file flags */
81: struct vnode *fd_cdir; /* current directory */
82: struct vnode *fd_rdir; /* root directory */
83: int fd_nfiles; /* number of open files allocated */
84: u_short fd_lastfile; /* high-water mark of fd_ofiles */
85: u_short fd_freefile; /* approx. next free file */
86: u_short fd_cmask; /* mask for file creation */
87: u_short fd_refcnt; /* reference count */
88: };
89:
90: /*
91: * Per-process open flags.
92: */
93: #define UF_EXCLOSE 0x01 /* auto-close on exec */
94: #define UF_MAPPED 0x02 /* mapped from device */
95: #define UF_RESERVED 0x04 /* open pending / in progress */
96:
97: /*
98: * Storage required per open file descriptor.
99: */
100: #define OFILESIZE (sizeof(struct file *) + sizeof(char))
101:
102: #ifdef KERNEL
103: /*
104: * Kernel global variables and routines.
105: */
106: extern int dupfdopen __P((struct filedesc *fdp,
107: int indx, int dfd, int mode, int error));
108: extern int fdalloc __P((struct proc *p, int want, int *result));
109: extern void fdrelse __P((struct proc *p, int fd));
110: extern int fdavail __P((struct proc *p, int n));
111: extern int fdgetf __P((struct proc *p, int fd, struct file **resultfp));
112: #define fdfile(p, fd) \
113: (&(p)->p_fd->fd_ofiles[(fd)])
114: #define fdflags(p, fd) \
115: (&(p)->p_fd->fd_ofileflags[(fd)])
116: extern int falloc __P((struct proc *p,
117: struct file **resultfp, int *resultfd));
118: extern void ffree __P((struct file *fp));
119: extern struct filedesc *fdcopy __P((struct proc *p));
120: extern void fdfree __P((struct proc *p));
121: extern void fdexec __P((struct proc *p));
122:
123: #endif /* KERNEL */
124:
125: #endif /* !_SYS_FILEDESC_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.