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 .