Coherent4.2.10/include/sys/fd.h
/* (-lgl
* Coherent 386 release 4.2
* Copyright (c) 1982, 1993 by Mark Williams Company.
* All rights reserved. May not be copied without permission.
* For copying permission and licensing info, write licensing@mwc.com
-lgl) */
#ifndef __SYS_FD_H__
#define __SYS_FD_H__
#include <common/feature.h>
#include <common/ccompat.h>
#include <common/__fsize.h>
#if ! (_KERNEL || _DDI_DKI_IMPL)
# error You must be compiling the kernel to use this header
#endif
/*
* The FD_CLOEXEC is not actually stored in the structure above, because it
* is an attribute specific to a single file descriptor rather than global to
* an open file object (which may have multiple references to it).
*
* To capture this information, we note that pointers as returned by an
* allocator such as kalloc () are all aligned at integer granularity at a
* minimum, leaving us one or possibly two least-significant bits for pointer-
* tagging.
*
* We create a non-arithmetic pointer type for the purpose of holding tagged
* pointers. The operations on this type are hidden, however.
*/
typedef struct __tagged_fd * tagfd_t;
#if __MWC__
struct __tagged_fd {
char _bogus; /* bug in MWC 'cc' */
};
#endif
/*
* File descriptor structure.
*/
typedef struct fd __fd_t;
struct fd {
short f_flag; /* Flags */
short f_refc; /* Reference count */
__fsize_t f_seek; /* Seek pointer */
struct inode * f_ip; /* Pointer to inode */
};
typedef unsigned fd_t;
#define ERROR_FD ((fd_t) -1)
__EXTERN_C_BEGIN__
__fd_t * fd_get __PROTO ((fd_t _fd));
int fd_get_flags __PROTO ((fd_t _fd));
int fd_set_flags __PROTO ((fd_t _fd, int _flags));
fd_t fd_dup __PROTO ((fd_t _old, fd_t _fbase));
int fd_recv __PROTO ((fd_t fd, __fd_t * _fdp));
fd_t fd_get_free __PROTO ((void));
fd_t fd_alloc __PROTO ((void));
int fd_init __PROTO ((fd_t _fd, struct inode * _ip,
int _mode));
fd_t fd_finish __PROTO ((fd_t _fd));
fd_t fd_open __PROTO ((struct inode * _ip, int _mode));
void fd_close __PROTO ((fd_t _fd));
void fd_dup_all __PROTO ((void));
void fd_close_all __PROTO ((void));
__EXTERN_C_END__
#endif /* ! defined (__SYS_FD_H__) */