The open-time flags specify options affecting how open
will behave. These options are not preserved once the file is open. The exception to this is O_NONBLOCK
, which is also an I/O operating mode and so it is saved. See Opening and Closing Files, for how to call open
.
There are two sorts of options specified by open-time flags.
File name translation flags affect how open
looks up the file name to locate the file, and whether the file can be created.
Open-time action flags specify extra operations that open
will perform on the file once it is open.
Here are the file name translation flags.
O_CREAT
and O_EXCL
are set, then open
fails if the specified file already exists. This is guaranteed to never clobber an existing file.
open
from blocking for a ``long time'' to open the file. This is only meaningful for some kinds of files, usually devices such as serial ports. Often opening a port to a modem blocks until the modem reports carrier detection; if O_NONBLOCK
is specified, open
will return immediately without a carrier.
Note that the O_NONBLOCK
flag is overloaded as both an I/O operating mode and a file name translation flag. This means that specifying O_NONBLOCK
in open
also sets nonblocking I/O mode; see Operating Modes. To open the file without blocking but do normal I/O that blocks, you must call open
with O_NONBLOCK
set and then call fcntl
to turn the bit off.
O_NOCTTY
is zero. These three file name translation flags exist only in the GNU system.
fstat
on the new file descriptor will return the information returned by lstat
on the link's name.)
The open-time action flags tell open
to do additional operations which are not really related to opening the file. The reason to do them as part of open
instead of in separate calls is that open
can do them atomically.
O_TRUNC
. In BSD and GNU you must have permission to write the file to truncate it, but you need not open for write access.
This is the only open-time action flag specified by POSIX.1. There is no good reason for truncation to be done by open
, instead of by calling ftruncate
afterwards. The O_TRUNC
flag existed in Unix before ftruncate
was invented, and is retained for backward compatibility.
flock
. See File Locks.
If O_CREAT
is specified, the locking is done atomically when creating the file. You are guaranteed that no other process will get the lock on the new file first.
flock
. See File Locks. This is atomic like O_SHLOCK
.