
#ifndef _FCNTL_ADD_INCLUDED
#define _FCNTL_ADD_INCLUDED

#ifdef  __cplusplus
extern "C" {
#endif

/* sys/fcntl.h - POSIX, XPG3 Data definitions for file control operations. */

/* cmd values for fcntl(): */
#define F_DUPFD         0       /* Duplicate fildes */
#define F_GETFD         1       /* Get fildes flags */
#define F_SETFD         2       /* Set fildes flags */
#define F_GETFL         3       /* Get file flags */
#define F_SETFL         4       /* Set file flags */
#define F_GETLK         7       /* Get file lock */
#define F_SETLK         8       /* Set file lock */
#define F_SETLKW        9       /* Set file lock and wait */

/* File descriptor flags used for fcntl(): */
#define FD_CLOEXEC      1

/* l_type values for record locking with fcntl(): */
#define F_RDLCK         01      /* Shared or Read lock. */
#define F_WRLCK         02      /* Exclusive or Write lock. */
#define F_UNLCK         03      /* Unlock. */

/* Additonal file status flag for open() and fcntl(): */
#define O_SYNC          020         /* synchronous write option */

/* Additional cmd values for fcntl(). */
#define F_CHKFL         10      /* Check legality of file flag changes */

/* file segment locking set data type - information passed to system by user 
 *
 * Posix defines l_pid as a pid_t.  This is only used if 
 * _INCLUDE_ALL_POSIX_SOURCE is defined in order to maintain
 * backward compatibility when desired
 */
struct flock {
        short   l_type;         /* Type of lock. */
        short   l_whence;       /* Flag for starting offset. */
        off_t   l_start;        /* Relative offset in bytes. */
        off_t   l_len;          /* Size; if 0 then until EOF. */
#ifdef _INCLUDE_ALL_POSIX_SOURCE
        long    l_sysid;
        pid_t   l_pid;          /* Process ID of the lock owner. */
#else
        short   l_sysid;
        short   l_pid;          /* Process ID of the lock owner. */
#endif /* _INCLUDE_ALL_POSIX_SOURCE */
};

#ifdef  __cplusplus
  }
#endif

#endif /* _FCNTL_ADD_INCLUDED */
