/* $Id: unistd.h,v 1.5 2002/10/29 04:45:25 rex Exp $ */ /* * unistd.h * * standard symbolic constants and types. Conforming to the Single UNIX(r) * Specification Version 2, System Interface & Headers Issue 5 * * This file is part of the ReactOS Operating System. * * Contributors: * Created by KJK::Hyperion * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __UNISTD_H_INCLUDED__ #define __UNISTD_H_INCLUDED__ /* INCLUDES */ #include #include #include /* OBJECTS */ extern char *optarg; extern int optind, opterr, optopt; /* TYPES */ /* CONSTANTS */ /* FIXME: set these constants appropriately */ /* Integer value indicating version of the ISO POSIX-1 standard (C language binding). */ #define _POSIX_VERSION (0) /* Integer value indicating version of the ISO POSIX-2 standard (Commands). */ #define _POSIX2_VERSION (0) /* Integer value indicating version of the ISO POSIX-2 standard (C language binding). */ #define _POSIX2_C_VERSION (0) /* Integer value indicating version of the X/Open Portability Guide to which the implementation conforms. */ #define _XOPEN_VERSION (500) /* The version of the XCU specification to which the implementation conforms */ /* TODO: set to an appropriate value when commands and utilities will be available */ #define _XOPEN_XCU_VERSION (-1) #if _XOPEN_XCU_VERSION != -1 #error TODO: define these constants #define _POSIX2_C_BIND #define _POSIX2_C_VERSION #define _POSIX2_CHAR_TERM #define _POSIX2_LOCALEDEF #define _POSIX2_UPE #define _POSIX2_VERSION #endif #if 0 /* TODO: check for conformance to the following specs */ #define _XOPEN_XPG2 #define _XOPEN_XPG3 #define _XOPEN_XPG4 #define _XOPEN_UNIX #endif #if 0 /* TODO: don't forget these features */ /* The use of chown() is restricted to a process with appropriate privileges, and to changing the group ID of a file only to the effective group ID of the process or to one of its supplementary group IDs. */ #define _POSIX_CHOWN_RESTRICTED /* Terminal special characters defined in can be disabled using this character value. */ #define _POSIX_VDISABLE /* Each process has a saved set-user-ID and a saved set-group-ID. */ #define _POSIX_SAVED_IDS /* Implementation supports job control. */ #define _POSIX_JOB_CONTROL #endif /* Pathname components longer than {NAME_MAX} generate an error. */ #define _POSIX_NO_TRUNC (1) /* The implementation supports the threads option. */ #define _POSIX_THREADS (1) /* FIXME: none of the following is strictly true yet */ /* The implementation supports the thread stack address attribute option. */ /* FIXME: not currently implemented. Should be trivial */ #define _POSIX_THREAD_ATTR_STACKADDR (1) /* The implementation supports the thread stack size attribute option. */ /* FIXME: not currently implemented. Should be trivial */ #define _POSIX_THREAD_ATTR_STACKSIZE (1) /* The implementation supports the process-shared synchronisation option. */ /* FIXME? not sure */ #define _POSIX_THREAD_PROCESS_SHARED (1) /* The implementation supports the thread-safe functions option. */ /* FIXME: fix errno (currently not thread-safe) */ #define _POSIX_THREAD_SAFE_FUNCTIONS (1) /*  Constants for Options and Feature Groups */ /* Implementation supports the C Language Binding option. This will always have a value other than -1. */ #define _POSIX2_C_BIND (1) /* Implementation supports the C Language Development Utilities option. */ /* FIXME: please change this when C compiler and utilities are ported */ #define _POSIX2_C_DEV (-1) /* Implementation supports at least one terminal type. */ /* FIXME: please change this when terminal emulation is complete */ #define _POSIX2_CHAR_TERM (-1) /* Implementation supports the FORTRAN Development Utilities option. */ /* FIXME: please change this when Fortran compiler and utilities are ported */ #define _POSIX2_FORT_DEV (-1) /* Implementation supports the FORTRAN Run-time Utilities option. */ /* FIXME: please change this when Fortran runtimes are ported */ #define _POSIX2_FORT_RUN (-1) /* Implementation supports the creation of locales by the localedef utility. */ /* FIXME: please change this when locales are ready */ #define _POSIX2_LOCALEDEF (-1) /* Implementation supports the Software Development Utilities option. */ /* FIXME? */ #define _POSIX2_SW_DEV (-1) /* The implementation supports the User Portability Utilities option. */ /* FIXME? */ #define _POSIX2_UPE (-1) /* The implementation supports the X/Open Encryption Feature Group. */ /* FIXME: please change this when encryption is ready */ #define _XOPEN_CRYPT (-1) /* The implementation supports the Issue 4, Version 2 Enhanced Internationalisation Feature Group. This is always set to a value other than -1. */ /* TODO: high priority. Support for this feature is needed for a conforming implementation */ #define _XOPEN_ENH_I18N (-1) /* The implementation supports the Legacy Feature Group. */ #define _XOPEN_LEGACY (1) /* The implementation supports the X/Open Realtime Feature Group. */ /* FIXME? unlikely to be ever supported */ #define _XOPEN_REALTIME (-1) /* The implementation supports the X/Open Realtime Threads Feature Group. */ /* FIXME? really unlikely to be ever supported */ #define _XOPEN_REALTIME_THREADS (-1) /* The implementation supports the Issue 4, Version 2 Shared Memory Feature Group. This is always set to a value other than -1. */ /* TODO: high priority. Support for this feature is needed for a conforming implementation */ #define _XOPEN_SHM (-1) /* Implementation provides a C-language compilation environment with 32-bit int, long, pointer and off_t types. */ #define _XBS5_ILP32_OFF32 (1) /* Implementation provides a C-language compilation environment with 32-bit int, long and pointer types and an off_t type using at least 64 bits. */ /* FIXME? check the off_t type */ #define _XBS5_ILP32_OFFBIG (1) /* Implementation provides a C-language compilation environment with 32-bit int and 64-bit long, pointer and off_t types. */ /* FIXME: on some architectures this may be true */ #define _XBS5_LP64_OFF64 (-1) /* Implementation provides a C-language compilation environment with an int type using at least 32 bits and long, pointer and off_t types using at least 64 bits. */ /* FIXME: on some architectures this may be true */ #define _XBS5_LPBIG_OFFBIG (-1) /* Implementation supports the File Synchronisation option. */ /* TODO: high priority. Implement this */ #define _POSIX_FSYNC /* Implementation supports the Memory Mapped Files option. */ /* TODO: high priority. Implement this */ #define _POSIX_MAPPED_FILES /* Implementation supports the Memory Protection option. */ /* TODO: high priority. Implement this */ #define _POSIX_MEMORY_PROTECTION #if 0 /* Implementation supports the Prioritized Input and Output option. */ /* FIXME? unlikely to be ever supported */ #define _POSIX_PRIORITIZED_IO #endif /* FIXME: these should be implemented */ /* Asynchronous input or output operations may be performed for the associated file. */ #define _POSIX_ASYNC_IO (-1) /* Prioritized input or output operations may be performed for the associated file. */ #define _POSIX_PRIO_IO (-1) /* Synchronised input or output operations may be performed for the associated file. */ #define _POSIX_SYNC_IO (-1) /* null pointer */ #ifndef NULL /* NULL seems to be defined pretty much everywhere - we prevent redefinition */ #define NULL ((void *)(0)) #endif /* constants for the access() function */ #define R_OK (0x00000004) /* Test for read permission. */ #define W_OK (0x00000002) /* Test for write permission. */ #define X_OK (0x00000001) /* Test for execute (search) permission. */ #define F_OK (0) /* Test for existence of file. */ /* constants for the confstr() function */ #define _CS_PATH (1) #define _CS_XBS5_ILP32_OFF32_CFLAGS (2) #define _CS_XBS5_ILP32_OFF32_LDFLAGS (3) #define _CS_XBS5_ILP32_OFF32_LIBS (4) #define _CS_XBS5_ILP32_OFF32_LINTFLAGS (5) #define _CS_XBS5_ILP32_OFFBIG_CFLAGS (6) #define _CS_XBS5_ILP32_OFFBIG_LDFLAGS (7) #define _CS_XBS5_ILP32_OFFBIG_LIBS (8) #define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS (9) #define _CS_XBS5_LP64_OFF64_CFLAGS (10) #define _CS_XBS5_LP64_OFF64_LDFLAGS (11) #define _CS_XBS5_LP64_OFF64_LIBS (12) #define _CS_XBS5_LP64_OFF64_LINTFLAGS (13) #define _CS_XBS5_LPBIG_OFFBIG_CFLAGS (14) #define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS (15) #define _CS_XBS5_LPBIG_OFFBIG_LIBS (16) #define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS (17) /* constants for the lseek() and fcntl() functions */ #define SEEK_SET (0) /* Set file offset to offset. */ #define SEEK_CUR (1) /* Set file offset to current plus offset. */ #define SEEK_END (2) /* Set file offset to EOF plus offset. */ /* constants for pathconf() */ /* constants 1 to 9 are the same as in Microsoft POSIX */ #define _PC_LINK_MAX ( 1) #define _PC_MAX_CANON ( 2) #define _PC_MAX_INPUT ( 3) #define _PC_NAME_MAX ( 4) #define _PC_PATH_MAX ( 5) #define _PC_PIPE_BUF ( 6) #define _PC_CHOWN_RESTRICTED ( 7) #define _PC_NO_TRUNC ( 8) #define _PC_VDISABLE ( 9) /* from this point, constants are in no particular order */ #define _PC_ALLOC_SIZE_MIN ( 10) #define _PC_ASYNC_IO ( 11) #define _PC_FILESIZEBITS ( 12) #define _PC_PRIO_IO ( 13) #define _PC_REC_INCR_XFER_SIZE ( 14) #define _PC_REC_MAX_XFER_SIZE ( 15) #define _PC_REC_MIN_XFER_SIZE ( 16) #define _PC_REC_XFER_ALIGN ( 17) #define _PC_SYNC_IO ( 18) /* constants for sysconf() */ /* constants 1 to 10 are the same as in Microsoft POSIX */ #define _SC_ARG_MAX ( 1) #define _SC_CHILD_MAX ( 2) #define _SC_CLK_TCK ( 3) #define _SC_NGROUPS_MAX ( 4) #define _SC_OPEN_MAX ( 5) #define _SC_JOB_CONTROL ( 6) #define _SC_SAVED_IDS ( 7) #define _SC_STREAM_MAX ( 8) #define _SC_TZNAME_MAX ( 9) #define _SC_VERSION ( 10) /* from this point, constants are in no particular order */ #define _SC_2_C_BIND ( 11) #define _SC_2_C_DEV ( 12) #define _SC_2_C_VERSION ( 13) #define _SC_2_FORT_DEV ( 14) #define _SC_2_FORT_RUN ( 15) #define _SC_2_LOCALEDEF ( 16) #define _SC_2_SW_DEV ( 17) #define _SC_2_UPE ( 18) #define _SC_2_VERSION ( 19) #define _SC_AIO_LISTIO_MAX ( 20) #define _SC_AIO_MAX ( 21) #define _SC_AIO_PRIO_DELTA_MAX ( 22) #define _SC_ASYNCHRONOUS_IO ( 23) #define _SC_ATEXIT_MAX ( 24) #define _SC_BC_BASE_MAX ( 25) #define _SC_BC_DIM_MAX ( 26) #define _SC_BC_SCALE_MAX ( 27) #define _SC_BC_STRING_MAX ( 28) #define _SC_COLL_WEIGHTS_MAX ( 29) #define _SC_DELAYTIMER_MAX ( 30) #define _SC_EXPR_NEST_MAX ( 31) #define _SC_FSYNC ( 32) #define _SC_GETGR_R_SIZE_MAX ( 33) #define _SC_GETPW_R_SIZE_MAX ( 34) #define _SC_IOV_MAX ( 35) #define _SC_LINE_MAX ( 36) #define _SC_LOGIN_NAME_MAX ( 37) #define _SC_MAPPED_FILES ( 38) #define _SC_MEMLOCK ( 39) #define _SC_MEMLOCK_RANGE ( 40) #define _SC_MEMORY_PROTECTION ( 41) #define _SC_MESSAGE_PASSING ( 42) #define _SC_MQ_OPEN_MAX ( 43) #define _SC_MQ_PRIO_MAX ( 44) #define _SC_PAGE_SIZE ( 45) #define _SC_PASS_MAX ( 46) /* LEGACY */ #define _SC_PRIORITIZED_IO ( 47) #define _SC_PRIORITY_SCHEDULING ( 48) #define _SC_RE_DUP_MAX ( 49) #define _SC_REALTIME_SIGNALS ( 50) #define _SC_RTSIG_MAX ( 51) #define _SC_SEMAPHORES ( 52) #define _SC_SEM_NSEMS_MAX ( 53) #define _SC_SEM_VALUE_MAX ( 54) #define _SC_SHARED_MEMORY_OBJECTS ( 55) #define _SC_SIGQUEUE_MAX ( 56) #define _SC_SYNCHRONIZED_IO ( 57) #define _SC_THREADS ( 58) #define _SC_THREAD_ATTR_STACKADDR ( 59) #define _SC_THREAD_ATTR_STACKSIZE ( 60) #define _SC_THREAD_DESTRUCTOR_ITERATIONS ( 61) #define _SC_THREAD_KEYS_MAX ( 62) #define _SC_THREAD_PRIORITY_SCHEDULING ( 63) #define _SC_THREAD_PRIO_INHERIT ( 64) #define _SC_THREAD_PRIO_PROTECT ( 65) #define _SC_THREAD_PROCESS_SHARED ( 66) #define _SC_THREAD_SAFE_FUNCTIONS ( 67) #define _SC_THREAD_STACK_MIN ( 68) #define _SC_THREAD_THREADS_MAX ( 69) #define _SC_TIMERS ( 70) #define _SC_TIMER_MAX ( 71) #define _SC_TTY_NAME_MAX ( 72) #define _SC_XOPEN_VERSION ( 73) #define _SC_XOPEN_CRYPT ( 74) #define _SC_XOPEN_ENH_I18N ( 75) #define _SC_XOPEN_SHM ( 76) #define _SC_XOPEN_UNIX ( 77) #define _SC_XOPEN_XCU_VERSION ( 78) #define _SC_XOPEN_LEGACY ( 79) #define _SC_XOPEN_REALTIME ( 80) #define _SC_XOPEN_REALTIME_THREADS ( 81) #define _SC_XBS5_ILP32_OFF32 ( 82) #define _SC_XBS5_ILP32_OFFBIG ( 83) #define _SC_XBS5_LP64_OFF64 ( 84) #define _SC_XBS5_LPBIG_OFFBIG ( 85) #define _SC_PAGESIZE _SC_PAGE_SIZE /* possible values for the function argument to the lockf() function */ #define F_LOCK (1) /* Lock a section for exclusive use. */ #define F_ULOCK (2) /* Unlock locked sections. */ #define F_TEST (3) /* Test section for locks by other processes. */ #define F_TLOCK (4) /* Test and lock a section for exclusive use. */ #define STDIN_FILENO (0) /* File number of stdin. */ #define STDOUT_FILENO (1) /* File number of stdout. */ #define STDERR_FILENO (2) /* File number of stderr. */ /* PROTOTYPES */ int access(const char *, int); unsigned int alarm(unsigned int); int brk(void *); int chdir(const char *); int chroot(const char *); /* LEGACY */ int chown(const char *, uid_t, gid_t); int close(int); size_t confstr(int, char *, size_t); char *crypt(const char *, const char *); char *ctermid(char *); char *cuserid(char *s); /* LEGACY */ int dup(int); int dup2(int, int); void encrypt(char[64], int); int execl(const char *, const char *, ...); int execle(const char *, const char *, ...); int execlp(const char *, const char *, ...); int execv(const char *, char *const []); int execve(const char *, char *const [], char *const []); int execvp(const char *, char *const []); void _exit(int); int fchown(int, uid_t, gid_t); int fchdir(int); int fdatasync(int); pid_t fork(void); long int fpathconf(int, int); int fsync(int); int ftruncate(int, off_t); char *getcwd(char *, size_t); int getdtablesize(void); /* LEGACY */ gid_t getegid(void); uid_t geteuid(void); gid_t getgid(void); int getgroups(int, gid_t []); long gethostid(void); char *getlogin(void); int getlogin_r(char *, size_t); int getopt(int, char * const [], const char *); int getpagesize(void); /* LEGACY */ char *getpass(const char *); /* LEGACY */ pid_t getpgid(pid_t); pid_t getpgrp(void); pid_t getpid(void); pid_t getppid(void); pid_t getsid(pid_t); uid_t getuid(void); char *getwd(char *); int isatty(int); int lchown(const char *, uid_t, gid_t); int link(const char *, const char *); int lockf(int, int, off_t); off_t lseek(int, off_t, int); int nice(int); long int pathconf(const char *, int); int pause(void); int pipe(int [2]); ssize_t pread(int, void *, size_t, off_t); int pthread_atfork(void (*)(void), void (*)(void), void(*)(void)); ssize_t pwrite(int, const void *, size_t, off_t); ssize_t read(int, void *, size_t); int readlink(const char *, char *, size_t); int rmdir(const char *); void *sbrk(intptr_t); int setgid(gid_t); int setpgid(pid_t, pid_t); pid_t setpgrp(void); int setregid(gid_t, gid_t); int setreuid(uid_t, uid_t); pid_t setsid(void); int setuid(uid_t); unsigned int sleep(unsigned int); void swab(const void *, void *, ssize_t); int symlink(const char *, const char *); void sync(void); long int sysconf(int); pid_t tcgetpgrp(int); int tcsetpgrp(int, pid_t); int truncate(const char *, off_t); char *ttyname(int); int ttyname_r(int, char *, size_t); useconds_t ualarm(useconds_t, useconds_t); int unlink(const char *); int usleep(useconds_t); pid_t vfork(void); ssize_t write(int, const void *, size_t); /* MACROS */ #endif /* __UNISTD_H_INCLUDED__ */ /* EOF */