The file access mode allows a file descriptor to be used for reading, writing, both, or neither. The access mode is determined when the file is opened, and never change.
int
O_RDONLY ¶Open the file for read access.
int
O_WRONLY ¶Open the file for write access.
int
O_RDWR ¶Open the file for both reading and writing.
int
O_PATH ¶Obtain a file descriptor for the file, but do not open the file for reading or writing. Permission checks for the file itself are skipped when the file is opened (but permission to access the directory that contains it is still needed), and permissions are checked when the descriptor is used later on.
For example, such descriptors can be used with the fexecve
function (see Executing a File).
This access mode is specific to Linux. On GNU/Hurd systems, it is
possible to use O_EXEC
explicitly, or specify no access modes
at all (see below).
The portable file access modes O_RDONLY
, O_WRONLY
, and
O_RDWR
may not correspond to individual bits. To determine the
file access mode with fcntl
, you must extract the access mode
bits from the retrieved file status flags, using the O_ACCMODE
mask.
int
O_ACCMODE ¶This macro is a mask that can be bitwise-ANDed with the file status flag value to recover the file access mode, assuming that a standard file access mode is in use.
If a non-standard file access mode is used (such as O_PATH
or
O_EXEC
), masking with O_ACCMODE
may give incorrect
results. These non-standard access modes are identified by individual
bits and have to be checked directly (without masking with
O_ACCMODE
first).
On GNU/Hurd systems (but not on other systems), O_RDONLY
and
O_WRONLY
are independent bits that can be bitwise-ORed together,
and it is valid for either bit to be set or clear. This means that
O_RDWR
is the same as O_RDONLY|O_WRONLY
. A file access
mode of zero is permissible; it allows no operations that do input or
output to the file, but does allow other operations such as
fchmod
. On GNU/Hurd systems, since “read-only” or “write-only”
is a misnomer, fcntl.h defines additional names for the file
access modes.
int
O_READ ¶Open the file for reading. Same as O_RDONLY
; only defined on GNU/Hurd.
int
O_WRITE ¶Open the file for writing. Same as O_WRONLY
; only defined on GNU/Hurd.
int
O_EXEC ¶Open the file for executing. Only defined on GNU/Hurd.