home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Headers / bsd / sys / fcntl.h < prev    next >
C/C++ Source or Header  |  1993-10-19  |  6KB  |  178 lines

  1. /*    @(#)fcntl.h    2.2 88/05/26 NFSSRC4.0 SMI; from UCB 5.1 85/05/30    */
  2. /*
  3.  * Copyright (c) 1983 Regents of the University of California.
  4.  * All rights reserved.  The Berkeley software License Agreement
  5.  * specifies the terms and conditions for redistribution.
  6.  *
  7.  * HISTORY
  8.  *  7-Jan-93  Mac Gillon (mgillon) at NeXT
  9.  *    Integrated POSIX support
  10.  *
  11.  * 27-Sep-89  Morris Meyer (mmeyer) at NeXT
  12.  *    NFS 4.0 Changes: addition of FSYNC flag for synchronous writes
  13.  *
  14.  * 19-Oct-87  Peter King (king) at NeXT, Inc.
  15.  *    Original Sun file.  Moved FNOSPC
  16.  */
  17.  
  18. #ifndef __FCNTL_HEADER__
  19. #define __FCNTL_HEADER__
  20.  
  21. #ifndef KERNEL
  22.     #include <standards.h>
  23. #endif
  24.  
  25. #if defined(_POSIX_SOURCE) && !defined(KERNEL)
  26.     #include <sys/types.h>
  27. #endif    /* _POSIX_SOURCE  & !KERNEL */
  28.  
  29. /*
  30.  * Flag values accessible to open(2) and fcntl(2)
  31.  *  (The first three can only be set by open)
  32.  */
  33. #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  34.     #define    O_RDONLY    000
  35.     #define    O_WRONLY    001
  36.     #define    O_RDWR        002
  37.  
  38.     #define    O_APPEND    00010    /* append (writes guaranteed */
  39.                     /* at the end) */
  40.     #define    O_CREAT        01000    /* open with file create */
  41.     #define    O_TRUNC        02000    /* open with truncation */
  42.     #define    O_EXCL        04000    /* error on create if file */
  43.                     /* exists */
  44. #endif /* _POSIX_SOURCE || _NEXT_SOURCE */
  45.  
  46. #ifdef _POSIX_SOURCE
  47.     #define O_ACCMODE    003    /* mask for file access modes */
  48.     #define O_NONBLOCK    00004    /* non-blocking open */
  49.     #define O_NOCTTY    00020    /* do not acquire a */
  50.                     /* controlling terminal */
  51. #endif /* _POSIX_SOURCE */
  52.  
  53. #ifdef _NEXT_SOURCE
  54.     #define    O_NDELAY    FNDELAY    /* Non-blocking I/O */
  55.     #define    O_SYNC        FSYNC    /* Synchronous writes */
  56.  
  57.     #ifdef NeXT
  58.         #define    O_POPUP       0x80000000   /* force window to */
  59.                         /* popup on open */
  60.         #define    O_NO_MFS   0x40000000   /* don't use mapped */
  61.                         /* files */
  62.         #define    O_ALERT       0x20000000    /* small, clean popup */
  63.                         /* window */
  64.     #endif /* NeXT */
  65. #endif    /* _NEXT_SOURCE */
  66.  
  67. /* flags for F_GETFL, F_SETFL-- needed by <sys/file.h> */
  68. #ifdef _NEXT_SOURCE
  69.     #define    FNDELAY        00004        /* non-blocking reads */
  70.     #define    FAPPEND        00010        /* append on each */
  71.                         /* write */
  72.     #define    FASYNC        00100        /* signal pgrp when */
  73.                         /* data */
  74.                         /* ready */
  75.     #define    FCREAT        01000        /* create if */
  76.                         /* nonexistant */
  77.     #define    FTRUNC        02000        /* truncate to zero */
  78.                         /* length */
  79.     #define    FEXCL        04000        /* error if already */
  80.                         /* created */
  81.     /* CS_RPAUSE */
  82.     #define    FNOSPC        010000        /* disable resource */
  83.                         /* pause */
  84.                         /* for file */
  85.     /* CS_RPAUSE */
  86.     #define    FSYNC        01000000    /* Synchronous writes */
  87.  
  88.     /* fcntl(2) requests */
  89.     #define    F_GETOWN     5        /* Get owner */
  90.     #define F_SETOWN     6        /* Set owner */
  91.  
  92. #endif /* _NEXT_SOURCE */
  93.  
  94. /* fcntl(2) requests */
  95. #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  96.     #define    F_DUPFD    0    /* Duplicate fildes */
  97.     #define    F_GETFD    1    /* Get fildes flags */
  98.     #define    F_SETFD    2    /* Set fildes flags */
  99.     #define    F_GETFL    3    /* Get file flags */
  100.     #define    F_SETFL    4    /* Set file flags */
  101.     #define F_GETLK  7      /* Get record-locking information */
  102.     #define F_SETLK  8      /* Set or Clear a record-lock */
  103.                 /* (Non-Blocking) */
  104.     #define F_SETLKW 9      /* Set or Clear a record-lock */
  105.                 /* (Blocking) */
  106. #endif /* _POSIX_SOURCE || _NEXT_SOURCE */
  107.  
  108. #if POSIX_KERN
  109.     #define _POSIX_FILE_FLAGS    (O_NO_MFS | FNOSPC)
  110. #endif  /* POSIX_KERN */
  111.  
  112. /* access(2) requests */
  113. #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  114.     #define    F_OK        0    /* does file exist */
  115.     #define    X_OK        1    /* is it executable by caller */
  116.     #define    W_OK        2    /* writable by caller */
  117.     #define    R_OK        4    /* readable by caller */
  118. #endif /* _POSIX_SOURCE || _NEXT_SOURCE */
  119.  
  120. /* System-V record-locking options */
  121. /* lockf(2) requests */
  122. #ifdef _NEXT_SOURCE 
  123.     #define F_ULOCK 0       /* Unlock a previously locked region */
  124.     #define F_LOCK  1       /* Lock a region for exclusive use */ 
  125.     #define F_TLOCK 2       /* Test and lock a region for */
  126.                 /* exclusive use */
  127.     #define F_TEST  3       /* Test a region for other processes locks */
  128. #endif /* _NEXT_SOURCE */
  129.  
  130. /* fcntl(2) flags (l_type field of flock structure) */
  131. #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  132.     #define F_RDLCK 1       /* read lock */
  133.     #define F_WRLCK 2       /* write lock */
  134.     #define F_UNLCK 3       /* remove lock(s) */
  135. #endif /* _POSIX_SOURCE || _NEXT_SOURCE */
  136.  
  137. #ifdef _POSIX_SOURCE
  138.     #define FD_CLOEXEC    01    /* Close on exec flag */
  139. #endif     /* _POSIX_SOURCE */
  140.  
  141.  
  142. /* file segment locking set data type - information passed to 
  143.  * system by user */
  144. struct flock {
  145. #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  146.            short   l_type;        /* F_RDLCK, F_WRLCK, or F_UNLCK */
  147.            short   l_whence;    /* flag to choose starting offset */
  148. #if defined(_POSIX_SOURCE) && !defined(KERNEL)
  149.            off_t    l_start;    /* relative offset, in bytes */
  150.            off_t    l_len;          /* length, in bytes; 0 means lock */
  151.                 /* to EOF */
  152. #else    /* _POSIX_SOURCE && !KERNEL */
  153.            long    l_start;    /* relative offset, in bytes */
  154.            long    l_len;          /* length, in bytes; 0 means lock */
  155.                 /* to EOF */
  156. #endif    /* _POSIX_SOURCE && !KERNEL */
  157. #if defined(_POSIX_SOURCE)
  158.            pid_t    l_pid;        /* returned with F_GETLK */    
  159. #else    /* _POSIX_SOURCE */
  160.            short   l_pid;        /* returned with F_GETLK */
  161. #endif    /* _POSIX_SOURCE */
  162.            short   l_xxx;        /* reserved for future use */
  163. #endif /* _POSIX_SOURCE) || _NEXT_SOURCE */
  164. };
  165.  
  166. #if defined(_POSIX_SOURCE) && !defined(KERNEL)
  167.     #ifdef __STDC__
  168.         extern creat(const char *path, mode_t mode);
  169.         extern fcntl(int fildes, int cmd, ...);
  170.         extern open(const char *path, int oflag, ...);
  171.     #else
  172.         extern creat();
  173.         extern fcntl();
  174.         extern open();
  175.     #endif    /* __STDC__ */
  176. #endif /* _POSIX_SOURCE && !KERNEL */
  177. #endif !__FCNTL_HEADER__
  178.