1 /* 2 * Copyright 2002-2009, Haiku Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _FCNTL_H 6 #define _FCNTL_H 7 8 9 #include <sys/types.h> 10 #include <sys/stat.h> 11 #include <unistd.h> 12 13 14 /* commands that can be passed to fcntl() */ 15 #define F_DUPFD 0x0001 /* duplicate fd */ 16 #define F_GETFD 0x0002 /* get fd flags */ 17 #define F_SETFD 0x0004 /* set fd flags */ 18 #define F_GETFL 0x0008 /* get file status flags and access mode */ 19 #define F_SETFL 0x0010 /* set file status flags */ 20 #define F_GETLK 0x0020 /* get locking information */ 21 #define F_SETLK 0x0080 /* set locking information */ 22 #define F_SETLKW 0x0100 /* as above, but waits if blocked */ 23 24 /* advisory locking types */ 25 #define F_RDLCK 0x0040 /* read or shared lock */ 26 #define F_UNLCK 0x0200 /* unlock */ 27 #define F_WRLCK 0x0400 /* write or exclusive lock */ 28 29 /* file descriptor flags for fcntl() */ 30 #define FD_CLOEXEC 1 /* close on exec */ 31 32 /* file access modes for open() */ 33 #define O_RDONLY 0x0000 /* read only */ 34 #define O_WRONLY 0x0001 /* write only */ 35 #define O_RDWR 0x0002 /* read and write */ 36 #define O_ACCMODE 0x0003 /* mask to get the access modes above */ 37 #define O_RWMASK O_ACCMODE 38 39 /* flags for open() */ 40 #define O_EXCL 0x0100 /* exclusive creat */ 41 #define O_CREAT 0x0200 /* create and open file */ 42 #define O_TRUNC 0x0400 /* open with truncation */ 43 #define O_NOCTTY 0x1000 /* don't make tty the controlling tty */ 44 #define O_NOTRAVERSE 0x2000 /* do not traverse leaf link */ 45 46 /* flags for open() and fcntl() */ 47 #define O_CLOEXEC 0x00000040 /* close on exec */ 48 #define O_NONBLOCK 0x00000080 /* non blocking io */ 49 #define O_NDELAY O_NONBLOCK 50 #define O_APPEND 0x00000800 /* to end of file */ 51 #define O_TEXT 0x00004000 /* CR-LF translation */ 52 #define O_BINARY 0x00008000 /* no translation */ 53 #define O_SYNC 0x00010000 /* write synchronized I/O file integrity */ 54 #define O_RSYNC 0x00020000 /* read synchronized I/O file integrity */ 55 #define O_DSYNC 0x00040000 /* write synchronized I/O data integrity */ 56 #define O_NOFOLLOW 0x00080000 /* fail on symlinks */ 57 #define O_NOCACHE 0x00100000 /* do not use the file system cache if */ 58 /* possible */ 59 #define O_DIRECT O_NOCACHE 60 #define O_DIRECTORY 0x00200000 /* fail if not a directory */ 61 62 /* TODO: currently not implemented additions: */ 63 #define O_TEMPORARY 0x00400000 /* used to avoid writing temporary files to disk */ 64 65 #define AT_FDCWD (-1) /* CWD FD for the *at() functions */ 66 67 #define AT_SYMLINK_NOFOLLOW 0x01 /* fstatat(), fchmodat(), fchownat(), 68 utimensat() */ 69 #define AT_SYMLINK_FOLLOW 0x02 /* linkat() */ 70 #define AT_REMOVEDIR 0x04 /* unlinkat() */ 71 #define AT_EACCESS 0x08 /* faccessat() */ 72 73 /* advisory file locking */ 74 75 struct flock { 76 short l_type; 77 short l_whence; 78 off_t l_start; 79 off_t l_len; 80 pid_t l_pid; 81 }; 82 83 84 #ifdef __cplusplus 85 extern "C" { 86 #endif 87 88 extern int creat(const char *path, mode_t mode); 89 extern int open(const char *path, int openMode, ...); 90 /* the third argument is the permissions of the created file when O_CREAT 91 is passed in oflags */ 92 extern int openat(int fd, const char *path, int openMode, ...); 93 94 extern int fcntl(int fd, int op, ...); 95 96 #ifdef __cplusplus 97 } 98 #endif 99 100 #endif /* _FCNTL_H */ 101