open(S)
open --
open for reading or writing
Syntax
cc . . . -lc
#include <fcntl.h>
int open (const char *path, int oflag, ... );
Description
path points to a path name naming a file.
The open system call
opens a file descriptor for the named file
and sets the file status flags
according to the value of
oflag.
For non-STREAMS files, oflag
values are constructed by OR-ing flags
from the following list (only one of the first three flags below
can be used):
O_RDONLY-
Open for reading only.
O_WRONLY-
Open for writing only.
O_RDWR-
Open for reading and writing.
O_APPEND-
If set, the file pointer is set to the end of the file
prior to each write.
O_CREAT-
If the file exists, this flag has no effect.
Otherwise, the user ID of the file
is set to the effective user ID
of the process;
the group ID of the file
is set to the effective group ID
of the process or to the group ID of the file's parent directory;
and
the low-order 12 bits of the file mode are set to the value of
mode, modified as follows (see
creat(S)):
-
All bits set in the file mode creation mask of the process are cleared
(see
umask(S)).
-
The ``save text image after execution bit'' of the mode is cleared
(see
chmod(S)).
O_EXCL-
Causes open to fail if the file exists. This can only be used
if O_CREAT is also set.
O_NOCTTY-
If this flag is set and path identifies a terminal, then that
terminal is prevented from becoming the controlling terminal for the process
O_SYNC-
When opening a regular file, this flag affects subsequent writes.
If set, each
write(S)
waits for both the file data and file status to be physically updated.
O_TRUNC-
If the file exists, is a regular file, and is opened for writing, its length
is truncated to 0. The mode, owner and group are left unchanged. It has no
effect on FIFO special files or directories.
O_NONBLOCK-
This flag may affect subsequent reads and writes
(see
read(S)
and
write(S)).
When opening a FIFO with O_RDONLY or
O_WRONLY set:
If O_NONBLOCK is set:-
An open
for reading only returns without delay.
An open
for writing only returns an error if no process
currently has the file open for reading.
If O_NONBLOCK is not set:-
An open
for reading only will block until a process
opens the file for writing.
An open
for writing only blocks until a process
opens the file for reading.
When opening a file associated with a communication line:
If O_NONBLOCK is set:-
The open returns without waiting for carrier.
If O_NONBLOCK is not set:-
The open blocks until carrier is present.
When opening a STREAMS file,
oflag
may be constructed from O_NONBLOCK or-ed with either
O_RDONLY, O_WRONLY or O_RDWR. Other flag
values are not applicable to STREAMS devices and have no
effect on them. The value of O_NONBLOCK affects the
operation of STREAMS drivers and certain system calls (see
read(S),
getmsg(S),
putmsg(S),
and
write(S)).
For drivers, the implementation of
O_NONBLOCK is device-specific. Each STREAMS device
driver may treat this option differently.
Certain flag values can be set following open as described
in
fcntl(S).
The file pointer used to mark the current position within the file
is set to the beginning of the file.
The new file descriptor is set to remain open across
exec system calls
(see
fcntl(S)).
The named file is opened unless one or more of the following is true:
[EACCES]-
-
A component of the
path prefix
denies search permission.
-
oflag
permission is denied for the named file.
-
The file does not exist and write permission is not set for the parent
directory of the file to be created.
-
O_TRUNC is specified and write permission is not set for the file.
[EAGAIN]-
The file exists, mandatory file/record locking is set,
and there are outstanding record locks on the file (see
chmod(S))
and O_TRUNC is included in oflag.
[EEXIST]-
O_CREAT and O_EXCL
are set, and the named file exists.
[EFAULT]-
path points outside the allocated address space of the process.
[EINTR]-
A signal was caught during the
open system call.
[EINVAL]-
The value of oflag is not valid.
[EIO]-
A hangup or error occurred during a STREAMS
open.
[EISDIR]-
The named file is a directory and
oflag includes O_WRONLY or O_RDWR
[EMFILE]-
OPEN_MAX descriptors are open in the current process.
[EMULTIHOP]-
Components of path require hopping to
multiple remote machines.
[ENAMETOOLONG]-
The length of path exceeds PATH_MAX or the length of
a pathname component exceeds NAME_MAX while
_POSIX_NO_TRUNC is in effect.
[ENFILE]-
The system file table is full, SYS_OPEN files are open in the
system.
[ENOENT]-
-
O_CREAT
is not set and the named file does not exist.
-
O_CREAT is set and either the path prefix does
not exist or the path argument is a null string.
[ENOLINK]-
path points to a remote machine, and the link
to that machine is no longer active.
[ENOMEM]-
The system is unable to allocate a send descriptor.
[ENOSPC]-
O_CREAT
and
O_EXCL
are set, and the file system is out of inodes.
[ENOSR]-
Unable to allocate a stream.
[ENOTDIR]-
A component of the path prefix
is not a directory.
[ENXIO]-
-
The named file is a character special or block special file,
and the device associated with this special file does not exist.
-
O_NONBLOCK
is set, the named file is a
FIFO,
O_WRONLY
is set, and no process has the file open for reading.
-
A STREAMS module or driver open routine failed.
[EROFS]-
The named file resides on a read-only file system and
oflag includes either O_WRONLY, O_RDWR,
O_CREAT (if the file does not exist) or O_TRUNC.
[ETXTBSY]-
The file is a pure procedure (shared text) file that is being executed and
oflag includes either O_WRONLY or O_RDWR.
Limitation
A maximum of three XENIX or UNIX partitions may be opened
on a hard disk.
Even if any of these are subsequently closed, no more may be
opened until reboot.
Diagnostics
Upon successful completion,
the file descriptor
is returned.
Otherwise, a value of -1 is returned, and
errno is set to indicate the error.
See also
chmod(S),
close(S),
creat(S),
dup(S),
fcntl(S),
getmsg(S),
lseek(S),
putmsg(S),
read(S),
umask(S),
write(S)
Standards conformance
open is conformant with:
X/Open Portability Guide, Issue 3, 1989
;
Intel386 Binary Compatibility Specification, Edition 2 (iBCSe2)
;
IEEE POSIX Std 1003.1-1990 System Application Program Interface (API) [C Language] (ISO/IEC 9945-1)
;
and
NIST FIPS 151-1
.
© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003