/* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)file.h 7.1 (Berkeley) 6/4/86 */ #ifdef KERNEL /* * Descriptor table entry. * One for each kernel object. */ struct file { int f_flag; /* see below */ short f_type; /* descriptor type */ short f_count; /* reference count */ short f_msgcount; /* references from message queue */ struct fileops { int (*fo_rw)(); int (*fo_ioctl)(); int (*fo_select)(); int (*fo_close)(); } *f_ops; caddr_t f_data; /* inode */ off_t f_offset; }; struct file *file, *fileNFILE; int nfile; struct file *getf(); struct file *falloc(); #endif /* * flags- also for fcntl call. */ #define FOPEN (-1) #define FREAD 00001 /* descriptor read/receive'able */ #define FWRITE 00002 /* descriptor write/send'able */ #ifndef F_DUPFD #define FNDELAY 00004 /* no delay */ #define FAPPEND 00010 /* append on each write */ #endif #define FMARK 00020 /* mark during gc() */ #define FDEFER 00040 /* defer for next gc pass */ #ifndef F_DUPFD #define FASYNC 00100 /* signal pgrp when data ready */ #endif #define FSHLOCK 00200 /* shared lock present */ #define FEXLOCK 00400 /* exclusive lock present */ /* bits to save after open */ #define FMASK 00113 #define FCNTLCANT (FREAD|FWRITE|FMARK|FDEFER|FSHLOCK|FEXLOCK) /* open only modes */ #define FCREAT 01000 /* create if nonexistant */ #define FTRUNC 02000 /* truncate to zero length */ #define FEXCL 04000 /* error if already created */ #ifndef F_DUPFD /* fcntl(2) requests--from */ #define F_DUPFD 0 /* Duplicate fildes */ #define F_GETFD 1 /* Get fildes flags */ #define F_SETFD 2 /* Set fildes flags */ #define F_GETFL 3 /* Get file flags */ #define F_SETFL 4 /* Set file flags */ #define F_GETOWN 5 /* Get owner */ #define F_SETOWN 6 /* Set owner */ #endif /* * User definitions. */ /* * Open call. */ #define O_RDONLY 000 /* open for reading */ #define O_WRONLY 001 /* open for writing */ #define O_RDWR 002 /* open for read & write */ #define O_NDELAY FNDELAY /* non-blocking open */ #define O_APPEND FAPPEND /* append on each write */ #define O_CREAT FCREAT /* open with file create */ #define O_TRUNC FTRUNC /* open with truncation */ #define O_EXCL FEXCL /* error on create if file exists */ /* * Flock call. */ #define LOCK_SH 1 /* shared lock */ #define LOCK_EX 2 /* exclusive lock */ #define LOCK_NB 4 /* don't block when locking */ #define LOCK_UN 8 /* unlock */ /* * Access call. */ #define F_OK 0 /* does file exist */ #define X_OK 1 /* is it executable by caller */ #define W_OK 2 /* writable by caller */ #define R_OK 4 /* readable by caller */ /* * Lseek call. */ #define L_SET 0 /* absolute offset */ #define L_INCR 1 /* relative to current offset */ #define L_XTND 2 /* relative to end of file */ #ifdef KERNEL #define GETF(fp, fd) { \ if ((unsigned)(fd) >= NOFILE || ((fp) = u.u_ofile[fd]) == NULL) { \ u.u_error = EBADF; \ return; \ } \ } #define DTYPE_INODE 1 /* file */ #define DTYPE_SOCKET 2 /* communications endpoint */ #endif