Some implementations permit opening FIFOs with O_RDWR. Since
       FIFOs could be implemented in other ways, and since two file
       descriptors can be used to the same effect, this possibility is
       left as undefined.
       See getgroups(3p) about the group of a newly created file.
       The use of open() to create a regular file is preferable to the
       use of creat(), because the latter is redundant and included only
       for historical reasons.
       The use of the O_TRUNC flag on FIFOs and directories (pipes
       cannot be open()-ed) must be permissible without unexpected side-
       effects (for example, creat() on a FIFO must not remove data).
       Since terminal special files might have type-ahead data stored in
       the buffer, O_TRUNC should not affect their content, particularly
       if a program that normally opens a regular file should open the
       current controlling terminal instead. Other file types,
       particularly implementation-defined ones, are left
       implementation-defined.
       POSIX.1‐2008 permits [EACCES] to be returned for conditions other
       than those explicitly listed.
       The O_NOCTTY flag was added to allow applications to avoid
       unintentionally acquiring a controlling terminal as a side-effect
       of opening a terminal file. This volume of POSIX.1‐2017 does not
       specify how a controlling terminal is acquired, but it allows an
       implementation to provide this on open() if the O_NOCTTY flag is
       not set and other conditions specified in the Base Definitions
       volume of POSIX.1‐2017, Chapter 11, General Terminal Interface
       are met.
       In historical implementations the value of O_RDONLY is zero.
       Because of that, it is not possible to detect the presence of
       O_RDONLY and another option. Future implementations should encode
       O_RDONLY and O_WRONLY as bit flags so that:
           O_RDONLY | O_WRONLY == O_RDWR
       O_EXEC and O_SEARCH are specified as two of the five file access
       modes.  Since O_EXEC does not apply to directories, and O_SEARCH
       only applies to directories, their values need not be distinct.
       Since O_RDONLY has historically had the value zero,
       implementations are not able to distinguish between O_SEARCH and
       O_SEARCH | O_RDONLY, and similarly for O_EXEC.
       In general, the open() function follows the symbolic link if path
       names a symbolic link. However, the open() function, when called
       with O_CREAT and O_EXCL, is required to fail with [EEXIST] if
       path names an existing symbolic link, even if the symbolic link
       refers to a nonexistent file. This behavior is required so that
       privileged applications can create a new file in a known location
       without the possibility that a symbolic link might cause the file
       to be created in a different location.
       For example, a privileged application that must create a file
       with a predictable name in a user-writable directory, such as the
       user's home directory, could be compromised if the user creates a
       symbolic link with that name that refers to a nonexistent file in
       a system directory. If the user can influence the contents of a
       file, the user could compromise the system by creating a new
       system configuration or spool file that would then be interpreted
       by the system. The test for a symbolic link which refers to a
       nonexisting file must be atomic with the creation of a new file.
       In addition, the open() function refuses to open non-directories
       if the O_DIRECTORY flag is set. This avoids race conditions
       whereby a user might compromise the system by substituting a hard
       link to a sensitive file (e.g., a device or a FIFO) while a
       privileged application is running, where opening a file even for
       read access might have undesirable side-effects.
       In addition, the open() function does not follow symbolic links
       if the O_NOFOLLOW flag is set.  This avoids race conditions
       whereby a user might compromise the system by substituting a
       symbolic link to a sensitive file (e.g., a device) while a
       privileged application is running, where opening a file even for
       read access might have undesirable side-effects.
       The POSIX.1‐1990 standard required that the group ID of a newly
       created file be set to the group ID of its parent directory or to
       the effective group ID of the creating process. FIPS 151‐2
       required that implementations provide a way to have the group ID
       be set to the group ID of the containing directory, but did not
       prohibit implementations also supporting a way to set the group
       ID to the effective group ID of the creating process.  Conforming
       applications should not assume which group ID will be used. If it
       matters, an application can use chown() to set the group ID after
       the file is created, or determine under what conditions the
       implementation will set the desired group ID.
       The purpose of the openat() function is to enable opening files
       in directories other than the current working directory without
       exposure to race conditions. Any part of the path of a file could
       be changed in parallel to a call to open(), resulting in
       unspecified behavior. By opening a file descriptor for the target
       directory and using the openat() function it can be guaranteed
       that the opened file is located relative to the desired
       directory. Some implementations use the openat() function for
       other purposes as well. In some cases, if the oflag parameter has
       the O_XATTR bit set, the returned file descriptor provides access
       to extended attributes. This functionality is not standardized
       here.