ftp.nice.ch/pub/next/developer/languages/c/gcc.2.7.2.2.I.b.tar.gz#/lib/gcc-lib/i386-next-nextstep3/2.7.2.2.f.2/include/bsd/sys/file.h

This is file.h in view mode; [Download] [Up]

/* 
 * Mach Operating System
 * Copyright (c) 1987 Carnegie-Mellon University
 * All rights reserved.  The CMU software License Agreement specifies
 * the terms and conditions for use and redistribution.
 */
/*
 * HISTORY
 *  7-Jan-93  Mac Gillon (mgillon) at NeXT
 * 	Integrated POSIX support
 *
 * 11-Aug-87  Peter King (king) at NeXT
 *	SUN_VFS: Added f_cred pointer to user's credentials
 *	     Moved fcntl and open flag defines to fcntl.h
 *
 * 25-Jan-86  Avadis Tevanian (avie) at Carnegie-Mellon University
 *	Upgraded to 4.3.
 */
 
/*
 * 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
 */

/* @(#)file.h	2.1 88/05/18 4.0NFSSRC SMI;	from UCB 7.1 06/04/86	*/
#import <sys/fcntl.h>

#ifdef	KERNEL_FILE
#define	KERNEL
#endif
#ifdef KERNEL
#import <kernserv/queue.h>

/*
 * Descriptor table entry.
 * One for each kernel object.
 */
struct	file {
	queue_chain_t	links;	/* links for list of all files */
	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;     /* ptr to file specific struct ([iv]node/socket) */
	off_t	f_offset;
/*VFS*/	struct	ucred *f_cred;	/* credentials of user who opened file */
};

queue_head_t	file_list;
struct	file *getf();
struct	file *falloc();
#endif

/*
 * flags- also for fcntl call. (VFS: see also fcntl.h)
 */
#define	FOPEN		(-1)
#define	FREAD		00001		/* descriptor read/receive'able */
#define	FWRITE		00002		/* descriptor write/send'able */
#define	FMARK		00020		/* mark during gc() */
#define	FDEFER		00040		/* defer for next gc pass */
#define	FSHLOCK		00200		/* shared lock present */
#define	FEXLOCK		00400		/* exclusive lock present */

#if POSIX_KERN
/*
 * POSIX behavior: When read() or write() is called on a pipe and the pipe is
 *                 supposed to block and the O_NONBLOCK flag is set, then
 *                 the function will return -1 and set errno to EAGAIN.  
 *                 On the NeXT, errno is set to EWOULDBLOCK.
 *
 * Since pipes on the NeXT are implemented using sockets, we need to
 * differentiate between sockets and pipes.  The following constant is
 * used internally for such purpose.
 */
#define	FPOSIX_PIPE	020000
#endif	/* POSIX_KERN */

/* bits to save after open */
#define	FMASK		00113
#if POSIX_KERN
#define	FCNTLCANT	(FREAD|FWRITE|FMARK|FDEFER|FSHLOCK|FEXLOCK|FPOSIX_PIPE)
#else
#define	FCNTLCANT	(FREAD|FWRITE|FMARK|FDEFER|FSHLOCK|FEXLOCK)
#endif	/* POSIX_KERN */

/*
 * User calls
 */


/*
 * 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 */

/*
 * 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
#if	NeXT

#define FPINPROGRESS ((void *)0xffff0000)

#define	GETF(fp, fd) { \
	if ((unsigned)(fd) >= u.u_ofile_cnt || ((fp) = u.u_ofile[fd]) == NULL || \
		(fp == (struct file *)FPINPROGRESS)) { \
		u.u_error = EBADF; \
		return; \
	} \
}
#else
#define	GETF(fp, fd) { \
	if ((unsigned)(fd) >= NOFILE || ((fp) = u.u_ofile[fd]) == NULL) { \
		u.u_error = EBADF; \
		return; \
	} \
}
#endif
#define	DTYPE_VNODE	1	/* file */
#define	DTYPE_SOCKET	2	/* communications endpoint */
#endif
#ifdef	KERNEL_FILE
#undef	KERNEL
#endif


These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.