OPEN(2) System Calls OPEN(2)
NAME
open - open or create a file for reading or writing
SYNOPSIS
#include <fcntl.h>
int open(const char *path, int flags, ...);
DESCRIPTION
The file name specified by path is opened for reading and/or writing as
specified by the argument flags. A third parameter, mode, (of type
mode_t) must be specified if and only if the O_CREAT flag is set. The
O_CREAT flag indicates that if the file doesn't exist it is to be cre‐
ated with mode mode as described in chmod(2) and modified by the
process' umask value (see umask(2)).
The flags specified are formed by the bitwise OR of the following val‐
ues:
O_RDONLY
Open the file for reading only.
O_WRONLY
Open the file for writing only. An attempt to open a volume di‐
rectory or subdirectory will fail.
O_RDWR Open the file for reading and writing. An attempt to open a
volume directory or subdirectory will fail.
O_APPEND
Opening a file with O_APPEND set causes the file pointer to be
moved to the current end of file; each write on the file will be
appended to the end.
O_CREAT
Create file if it does not exist.
O_TRUNC
If O_TRUNC is specified and the file exists, the file is trun‐
cated to zero length.
O_EXCL If O_EXCL is set with O_CREAT and the file already exists, open
returns an error. This may be used to implement a simple exclu‐
sive access locking mechanism. If O_EXCL is set and the last
component of the pathname is a symbolic link, open will fail
even if the symbolic link points to a non-existent name.
O_BINARY
Files opened with the ORCA/Shell open call by default do newline
translation unless the O_BINARY flag is used. This implementa‐
tion does no newline translation by default (see O_TRANS, be‐
low). The O_BINARY flag is ignored except that if it is set,
the GS/OS file type of any newly created file will be set to BIN
rather than TXT.
The O_BINARY flag is non-standard.
O_TRANS
If the O_TRANS flag has been set, then newline translation will
occur on all read and write calls on the returned file descrip‐
tor: During write calls, any LF (linefeed) character will be
translated to a CR (carridge return). During read calls, the
opposite translation occurs. This is similar to, but opposite
of, the O_BINARY flag interpretation under the ORCA/Shell.
The O_TRANS flag is non-standard and has been included only to
assist in the porting of problem Unix programs. Note that files
which use the CR-LF pair (as is commonly found on MS-DOS plat‐
forms), will not have the character pair collapsed to (expanded
from) a single character during reads from (writes to) those
files.
O_NONBLOCK
If the O_NONBLOCK flag is specified and the open call would re‐
sult in the process being blocked for some reason (e.g., waiting
for carrier on a dialup line), open returns immediately. The
first time the process attempts to perform I/O on the open file
it will block. (This feature is not currently implemented).
O_SHLOCK
Atomically obtain a shared lock. (This feature is not currently
implemented under GNO.)
O_EXLOCK
Atomically obtain an exclusive lock. (This feature is not cur‐
rently implemented under GNO.)
When opening a file, a lock with flock(2) semantics can be obtained by
setting O_SHLOCK for a shared lock, or O_EXLOCK for an exclusive lock.
If creating a file with O_CREAT, the request for the lock will never
fail (provided that the underlying filesystem supports locking).
If successful, open returns a non-negative integer, termed a file de‐
scriptor. It returns -1 and sets errno on failure. Unless O_APPEND
was specified, the file pointer used to mark the current position
within the file is set to the beginning of the file.
The new descriptor is set to remain open across execve system calls;
see close(2) and fcntl(2).
The system imposes a limit on the number of file descriptors open si‐
multaneously by one process. getdtablesize(2) returns the current sys‐
tem limit.
COMPATIBILITY
Unlike the GNO implementation, the ORCA/C open call takes no optional
third parameter.
The mode parameter is normally expected to be in Unix mode format, al‐
though this can be changed by the application. See mapMode(3).
BUGS
Because umask(2) is not yet implemented in the GNO kernel, it has no
effect on the fopen(3) or GS/OS OpenGS calls. Consequently, the umask
is not used in open(2), either.
Due to the way the stack is maintained under ORCA/C, it is an error to
provide the mode parameter if the O_CREAT flag is not set. Similarily,
it is an error to omit mode if O_CREATE is set. Depending on how the
calling routine was compiled, this error will either manifest itself as
a failed ORCA/C runtime stack check, or as a crash of the machine.
The flags O_NONBLOCK, O_SHLOCK, and O_EXLOCK are not currently imple‐
mented and will be ignored.
SEE ALSO
chmod(2), close(2), dup(2), getdtablesize(2), lseek(2), read(2),
write(2), umask(2)
HISTORY
An open function call appeared in Version 6 AT&T UNIX.
GNO 22 January 1997 OPEN(2)
Man(1) output converted with
man2html