OPEN(2-BSD) RISC/os Reference Manual OPEN(2-BSD)
NAME
open - open a file for reading or writing, or create a new
file
SYNOPSIS
#include <sys/file.h>
open(path, flags, mode)
char *path;
int flags, mode;
DESCRIPTION
open opens the file path for reading and/or writing, as
specified by the flags argument and returns a descriptor for
that file. The flags argument may indicate that the file is
to be created if it does not already exist (by specifying
the O_CREAT flag), in which case the file is created with
mode mode as described in chmod(2) and modified by the pro-
cess' umask value (see umask(2)).
path is the address of a string of ASCII characters
representing a path name, terminated by a null character.
The flags specified are formed by or'ing the following
values:
O_RDONLY open for reading only
O_WRONLY open for writing only
O_RDWR open for reading and writing
O_NDELAY do not block on open
O_APPEND append on each write
O_CREAT create file if it does not exist
O_TRUNC truncate size to 0
O_EXCL error if create and file exists
Opening a file with O_APPEND set causes each write on the
file to be appended to the end. If O_TRUNC is specified and
the file exists, the file is truncated to zero length. If
O_EXCL is set with O_CREAT, then if the file already exists,
the open returns an error. This can be used to implement a
simple exclusive access locking mechanism. If O_EXCL is set
and the last component of the pathname is a symbolic link,
the open will fail even if the symbolic link points to a
non-existent name. If the O_NDELAY flag is specified and
the open call would result in the process being blocked for
some reason (e.g. waiting for carrier on a dialup line), the
Printed 1/15/91 Page 1
OPEN(2-BSD) RISC/os Reference Manual OPEN(2-BSD)
open returns immediately. The first time the process
attempts to perform i/o on the open file it will block (not
currently implemented).
Upon successful completion a non-negative integer, called a
file descriptor, is returned. 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 sys-
tem calls; see close(2).
The system imposes a limit on the number of file descriptors
open simultaneously by one process. getdtablesize(2)
returns the current system limit.
ERRORS
The named file is opened unless one or more of the following
are true:
[ENOTDIR] A component of the path prefix is not a
directory.
[EINVAL] The pathname contains a character with
the high-order bit set.
[ENAMETOOLONG] A component of a pathname exceeded 255
characters, or an entire path name
exceeded 1023 characters.
[ENOENT] O_CREAT is not set and the named file
does not exist.
[ENOENT] A component of the path name that must
exist does not exist.
[EACCES] Search permission is denied for a com-
ponent of the path prefix.
[EACCES] The required permissions (for reading
and/or writing) are denied for the named
flag.
[EACCES] O_CREAT is specified, the file does not
exist, and the directory in which it is
to be created does not permit writing.
[ELOOP] Too many symbolic links were encountered
in translating the pathname.
[EISDIR] The named file is a directory, and the
arguments specify it is to be opened for
Page 2 Printed 1/15/91
OPEN(2-BSD) RISC/os Reference Manual OPEN(2-BSD)
writting.
[EROFS] The named file resides on a read-only
file system, and the file is to be modi-
fied.
[EMFILE] The system limit for open file descrip-
tors per process has already been
reached.
[ENFILE] The system file table is full.
[ENXIO] The named file is a character special or
block special file, and the device asso-
ciated with this special file does not
exist.
[ENOSPC] O_CREAT is specified, the file does not
exist, and the directory in which the
entry for the new file is being placed
cannot be extended because there is no
space left on the file system containing
the directory.
[ENOSPC] O_CREAT is specified, the file does not
exist, and there are no free inodes on
the file system on which the file is
being created.
[EDQUOT] O_CREAT is specified, the file does not
exist, and the directory in which the
entry for the new fie is being placed
cannot be extended because the user's
quota of disk blocks on the file system
containing the directory has been
exhausted.
[EDQUOT] O_CREAT is specified, the file does not
exist, and the user's quota of inodes on
the file system on which the file is
being created has been exhausted.
[EIO] An I/O error occurred while making the
directory entry or allocating the inode
for O_CREAT.
[ETXTBSY] The file is a pure procedure (shared
text) file that is being executed and
the open call requests write access.
[EFAULT] path points outside the process's allo-
cated address space.
Printed 1/15/91 Page 3
OPEN(2-BSD) RISC/os Reference Manual OPEN(2-BSD)
[EEXIST] O_CREAT and O_EXCL were specified and
the file exists.
[EOPNOTSUPP] An attempt was made to open a socket
(not currently implemented).
SEE ALSO
chmod(2), close(2), dup(2), getdtablesize(2), lseek(2),
read(2), write(2), umask(2).
Page 4 Printed 1/15/91