williamr@2: /* williamr@2: * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef _FCNTL_ williamr@2: #define _FCNTL_ williamr@2: williamr@2: #ifdef __cplusplus williamr@2: extern "C" { williamr@2: #endif williamr@2: williamr@2: #include <_ansi.h> williamr@2: #define _FOPEN (-1) /* from sys/file.h, kernel use only */ williamr@2: #define _FREAD 0x0001 /* read enabled */ williamr@2: #define _FWRITE 0x0002 /* write enabled */ williamr@2: #define _FNDELAY 0x0004 /* non blocking I/O (4.2 style) */ williamr@2: #define _FAPPEND 0x0008 /* append (writes guaranteed at the end) */ williamr@2: #define _FMARK 0x0010 /* internal; mark during gc() */ williamr@2: #define _FDEFER 0x0020 /* internal; defer for next gc pass */ williamr@2: #define _FASYNC 0x0040 /* signal pgrp when data ready */ williamr@2: #define _FSHLOCK 0x0080 /* BSD flock() shared lock present */ williamr@2: #define _FEXLOCK 0x0100 /* BSD flock() exclusive lock present */ williamr@2: #define _FCREAT 0x0200 /* open with file create */ williamr@2: #define _FTRUNC 0x0400 /* open with truncation */ williamr@2: #define _FEXCL 0x0800 /* error on open if file exists */ williamr@2: #define _FNBIO 0x1000 /* non blocking I/O (sys5 style) */ williamr@2: #define _FSYNC 0x2000 /* do all writes synchronously */ williamr@2: #define _FNONBLOCK 0x4000 /* non blocking I/O (POSIX style) */ williamr@2: #define _FNOCTTY 0x8000 /* don't assign a ctty on this open */ williamr@2: williamr@2: #define _FBUFFERED 0x10000 /* buffer at the interface to the file system */ williamr@2: williamr@2: #define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) williamr@2: williamr@2: /** williamr@2: Flag values for open(2) and fcntl(2) williamr@2: The kernel adds 1 to the open modes to turn it into some williamr@2: combination of FREAD and FWRITE. williamr@2: */ williamr@2: #define O_RDONLY 0 /* +1 == FREAD */ williamr@2: #define O_WRONLY 1 /* +1 == FWRITE */ williamr@2: #define O_RDWR 2 /* +1 == FREAD|FWRITE */ williamr@2: #define O_APPEND _FAPPEND williamr@2: #define O_CREAT _FCREAT williamr@2: #define O_TRUNC _FTRUNC williamr@2: #define O_EXCL _FEXCL williamr@2: /* O_SYNC _FSYNC not posix, defined below */ williamr@2: /* O_NDELAY _FNDELAY set in include/fcntl.h */ williamr@2: /* O_NDELAY _FNBIO set in 5include/fcntl.h */ williamr@2: #define O_NONBLOCK _FNONBLOCK williamr@2: #define O_NOCTTY _FNOCTTY williamr@2: williamr@2: #define _FBINARY 0x10000 williamr@2: #define _FTEXT 0x20000 williamr@2: #define O_BINARY _FBINARY williamr@2: #define O_TEXT _FTEXT williamr@2: #define O_BUFFERED _FBUFFERED williamr@2: williamr@2: #ifndef _POSIX_SOURCE williamr@2: williamr@2: #define O_SYNC _FSYNC williamr@2: williamr@2: /** williamr@2: Flags that work for fcntl(fd, F_SETFL, FXXXX) williamr@2: */ williamr@2: #define FAPPEND _FAPPEND williamr@2: #define FSYNC _FSYNC williamr@2: #define FASYNC _FASYNC williamr@2: #define FNBIO _FNBIO williamr@2: #define FNONBIO _FNONBLOCK /* XXX fix to be NONBLOCK everywhere */ williamr@2: #define FNDELAY _FNDELAY williamr@2: williamr@2: /** williamr@2: Flags that are disallowed for fcntl's (FCNTLCANT); williamr@2: used for opens, internal state, or locking. williamr@2: */ williamr@2: #define FREAD _FREAD williamr@2: #define FWRITE _FWRITE williamr@2: #define FMARK _FMARK williamr@2: #define FDEFER _FDEFER williamr@2: #define FSHLOCK _FSHLOCK williamr@2: #define FEXLOCK _FEXLOCK williamr@2: williamr@2: /** williamr@2: The rest of the flags, used only for opens williamr@2: */ williamr@2: #define FOPEN _FOPEN williamr@2: #define FCREAT _FCREAT williamr@2: #define FTRUNC _FTRUNC williamr@2: #define FEXCL _FEXCL williamr@2: #define FNOCTTY _FNOCTTY williamr@2: #define FBUFFERED _FBUFFERED williamr@2: williamr@2: #endif /* !_POSIX_SOURCE */ williamr@2: williamr@2: /** williamr@2: XXX close on exec request; must match UF_EXCLOSE in user.h williamr@2: */ williamr@2: #define FD_CLOEXEC 1 /* posix */ williamr@2: williamr@2: /** williamr@2: fcntl(2) requests williamr@2: */ williamr@2: #define F_DUPFD 0 /* Duplicate fildes */ williamr@2: #define F_GETFD 1 /* Get fildes flags (close on exec) */ williamr@2: #define F_SETFD 2 /* Set fildes flags (close on exec) */ williamr@2: #define F_GETFL 3 /* Get file flags */ williamr@2: #define F_SETFL 4 /* Set file flags */ williamr@2: #ifndef _POSIX_SOURCE williamr@2: #define F_GETOWN 5 /* Get owner - for ASYNC */ williamr@2: #define F_SETOWN 6 /* Set owner - for ASYNC */ williamr@2: #endif /* !_POSIX_SOURCE */ williamr@2: #define F_GETLK 7 /* Get record-locking information */ williamr@2: #define F_SETLK 8 /* Set or Clear a record-lock (Non-Blocking) */ williamr@2: #define F_SETLKW 9 /* Set or Clear a record-lock (Blocking) */ williamr@2: #ifndef _POSIX_SOURCE williamr@2: #define F_RGETLK 10 /* Test a remote lock to see if it is blocked */ williamr@2: #define F_RSETLK 11 /* Set or unlock a remote lock */ williamr@2: #define F_CNVT 12 /* Convert a fhandle to an open fd */ williamr@2: #define F_RSETLKW 13 /* Set or Clear remote record-lock(Blocking) */ williamr@2: #endif /* !_POSIX_SOURCE */ williamr@2: williamr@2: /** williamr@2: fcntl(2) flags (l_type field of flock structure) williamr@2: */ williamr@2: #define F_RDLCK 1 /* read lock */ williamr@2: #define F_WRLCK 2 /* write lock */ williamr@2: #define F_UNLCK 3 /* remove lock(s) */ williamr@2: #ifndef _POSIX_SOURCE williamr@2: #define F_UNLKSYS 4 /* remove remote locks for a given system */ williamr@2: #endif /* !_POSIX_SOURCE */ williamr@2: williamr@2: /*#include */ williamr@2: williamr@2: /** williamr@2: file segment locking set data type - information passed to system by user williamr@2: */ williamr@2: struct flock { williamr@2: short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */ williamr@2: short l_whence; /* flag to choose starting offset */ williamr@2: long l_start; /* relative offset, in bytes */ williamr@2: long l_len; /* length, in bytes; 0 means lock to EOF */ williamr@2: short l_pid; /* returned with F_GETLK */ williamr@2: short l_xxx; /* reserved for future use */ williamr@2: }; williamr@2: williamr@2: #ifndef _POSIX_SOURCE williamr@2: /** williamr@2: extended file segment locking set data type williamr@2: */ williamr@2: struct eflock { williamr@2: short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */ williamr@2: short l_whence; /* flag to choose starting offset */ williamr@2: long l_start; /* relative offset, in bytes */ williamr@2: long l_len; /* length, in bytes; 0 means lock to EOF */ williamr@2: short l_pid; /* returned with F_GETLK */ williamr@2: short l_xxx; /* reserved for future use */ williamr@2: long l_rpid; /* Remote process id wanting this lock */ williamr@2: long l_rsys; /* Remote system id wanting this lock */ williamr@2: }; williamr@2: #endif /* !_POSIX_SOURCE */ williamr@2: williamr@2: williamr@2: #include williamr@2: #include /* sigh. for the mode bits for open/creat */ williamr@2: williamr@2: #define creat(n,m) open(n,O_WRONLY|O_CREAT|O_TRUNC,m) williamr@2: IMPORT_C int open (const char *, int, ...); williamr@2: IMPORT_C int wopen (const wchar_t *, int, ...); williamr@2: extern int fcntl (int, int, ...); williamr@2: williamr@2: #ifdef __cplusplus williamr@2: } williamr@2: #endif williamr@2: #endif /* !_FCNTL_ */