#### 13.15.1 File Access Modes ¶

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.

Macro: `int` O_RDONLY ¶

  Open the file for read access.

Macro: `int` O_WRONLY ¶

  Open the file for write access.

Macro: `int` O_RDWR ¶

  Open the file for both reading and writing.

Macro: `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). Other applications involve the ‘`*at`’ function variants, along with the `AT_EMPTY_PATH` flag. See Descriptor-Relative Access.

  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.

Macro: `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.

Macro: `int` O_READ ¶

  Open the file for reading. Same as `O_RDONLY`; only defined on GNU/Hurd.

Macro: `int` O_WRITE ¶

  Open the file for writing. Same as `O_WRONLY`; only defined on GNU/Hurd.

Macro: `int` O_EXEC ¶

  Open the file for executing. Only defined on GNU/Hurd.