Next: Operating Modes, Previous: Access Modes, Up: File Status Flags
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.
open looks up the
file name to locate the file, and whether the file can be created.
open will
perform on the file once it is open.
Here are the file name translation flags.
If both
O_CREATandO_EXCLare set, thenopenfails if the specified file already exists. This is guaranteed to never clobber an existing file.
This prevents
openfrom blocking for a “long time” to open the file. This is only meaningful for some kinds of files, usually devices such as serial ports; when it is not meaningful, it is harmless and ignored. Often opening a port to a modem blocks until the modem reports carrier detection; ifO_NONBLOCKis specified,openwill return immediately without a carrier.Note that the
O_NONBLOCKflag is overloaded as both an I/O operating mode and a file name translation flag. This means that specifyingO_NONBLOCKinopenalso sets nonblocking I/O mode; see Operating Modes. To open the file without blocking but do normal I/O that blocks, you must callopenwithO_NONBLOCKset and then callfcntlto turn the bit off.
If the named file is a terminal device, don't make it the controlling terminal for the process. See Job Control, for information about what it means to be the controlling terminal.
In the GNU system and 4.4 BSD, opening a file never makes it the controlling terminal and
O_NOCTTYis zero. However, other systems may use a nonzero value forO_NOCTTYand set the controlling terminal when you open a file that is a terminal device; so to be portable, useO_NOCTTYwhen it is important to avoid this.
The following three file name translation flags exist only in the GNU system.
Do not recognize the named file as the controlling terminal, even if it refers to the process's existing controlling terminal device. Operations on the new file descriptor will never induce job control signals. See Job Control.
If the named file is a symbolic link, open the link itself instead of the file it refers to. (
fstaton the new file descriptor will return the information returned bylstaton the link's name.)
If the named file is specially translated, do not invoke the translator. Open the bare file the translator itself sees.
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.
Truncate the file to zero length. This option is only useful for regular files, not special files such as directories or FIFOs. POSIX.1 requires that you open the file for writing to use
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 callingftruncateafterwards. TheO_TRUNCflag existed in Unix beforeftruncatewas invented, and is retained for backward compatibility.
The remaining operating modes are BSD extensions. They exist only on some systems. On other systems, these macros are not defined.
Acquire a shared lock on the file, as with
flock. See File Locks.If
O_CREATis 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.
Acquire an exclusive lock on the file, as with
flock. See File Locks. This is atomic likeO_SHLOCK.