open [ MPE/iX Developer's Kit Reference Manual Volume I ] MPE/iX 5.0 Documentation
MPE/iX Developer's Kit Reference Manual Volume I
open
Opens a file and returns its file descriptor.
Syntax
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open (const char *pathname, int oflag, ...);
Parameters
pathname A pointer to a string containing a pathname of a file to be
opened. The pathname must be terminated by a null character.
oflag A value specifying the file status and file access modes of
the file to be opened. If O_CREAT is specified, the mode of
the file must be passed in a third parameter, modes.
The value of oflag is the bitwise inclusive OR of flags from
the following two lists (defined in <fcntl.h>).
Only one of the following three flags must be specified in
oflag:
O_RDONLY Open for reading only.
O_WRONLY Open for writing only.
O_RDWR Open for both reading and writing.
If the file is opened O_WRONLY or O_RDWR, the st_mtime file
time field is marked for update. If the file is opened
O_RDONLY or O_RDWR, the st_atime file time field is marked for
update.
Any combination of the following optional flags may also be
specified in oflag:
O_APPEND The file offset is set to the end of the file prior
to each write.
O_CREAT This option requires a third parameter, mode, which
is of type mode_t. If the optional third parameter
is not passed when O_CREAT is specified, open()
attempts to read invalid data off the stack, and
the results are indeterminate. If the file exists,
this flag has no effect, except as noted under
O_EXCL, below.
If the file is created, the following occurs:
* The file offset is set to the beginning of
the file (where the offset position is 0).
* The file's UID is set to the effective UID
of the calling process.
* The file's GID is set to the GID of the
directory in which the file is being
created.
* The access permission bits of the file are
set to mode and modified by the file mode
creation mask of the calling process.
* The following file time fields are marked
for update:
* The file's st_atime, st_ctime and
st_mtime time fields.
* The parent directory's st_ctime and
st_mtime time fields.
O_EXCL The file is opened for exclusive access by the
calling process. An error results if both O_EXCL
and O_CREAT are specified for an existing file.
An existing file can be opened with O_EXCL and
without O_CREAT only if the file is not currently
open by another process (otherwise, an error
results).
O_TRUNC If the file exists and opened O_TRUNC and either
O_RDWR or O_WRONLY, it is truncated to zero length
and the mode and owner remain unchanged. The file
offset is set to the beginning of the file (where
the offset position is 0).
An error results if the file is opened O_TRUNC and
O_RDONLY.
If O_TRUNC is specified for an existing file, the
st_ctime and st_mtime time fields of the file are
marked for update.
If oflag specifies O_CREAT, mode, a structure of type mode_t,
must be passed to specify the access permission bits that the
file is to be created with. Access permission bits are set by
ORing any combination of the following macros:
S_IRWXU Set file owner class read, write, and execute
(if a file) or search (if a directory)
permission bits.
S_IRUSR Set file owner class read permission bit.
S_IWUSR Set file owner class write permission bit.
S_IXUSR Set file owner class execute (if a file) or
search (if a directory) permission bit.
S_IRWXG Set file group class read, write, and execute
(if a file) or search (if a directory)
permission bits.
S_IRGRP Set file group class read permission bit.
S_IWGRP Set file group class write permission bit.
S_IXGRP Set file group class execute (if a file) or
search (if a directory) permission bit.
S_IRWXO Set file other class read, write, and execute
(if a file), or search (if a directory)
permission bits.
S_IROTH Set file other class read permission bit.
S_IWOTH Set file other class write permission bit.
S_IXOTH Set file other class execute (if a file) or
search (if a directory) permission bit.
Bits that are not access permission bits must contain zeros,
or an error is returned.
Return Values
>=0 Success. A nonnegative integer is returned representing the
lowest numbered file descriptor not open by the calling
process.
-1 An error occurred. The file is not opened, and errno is set
to indicate the error condition.
Description
The open() function establishes the connection between a file specified
by pathname and a file descriptor. It creates an open file description
that refers to the file and a file descriptor that refers to that open
file description. The file descriptor is used by other I/O functions to
refer to the file.
The open() function returns a file descriptor for the specified file,
which is the lowest file descriptor not currently open for the calling
process. The open file description is new; therefore, the file
descriptor does not share it with any other process in the system.
Implementation Considerations
Refer to the EACCES, EMFILE, EEXCL, EFAULT, EIMPL, EINVAL, and ESYSERR
error descriptions below.
Pipes (or FIFOs), device special files, and read-only file systems are
not supported through POSIX/iX interfaces and cannot be opened by open().
Device files are inherited from the parent process, which has them opened
as STDIN_FILENO, STDOUT_FILENO, and STDERR_FILENO.
The GID of a newly created file is set to the GID of the directory in
which the file is created.
MPE/iX file equations are ignored by open().
The calling process must have the correct access permissions as defined
by either an attached ACD or by the MPE/iX file security matrix. For
example, a file opened O_RDONLY must have either ACD read access or
MPE/iX read access. A file opened O_WRONLY or O_RDWR must have either
ACD write access and append access or MPE/iX write access and append
access.
Signals generated for the calling process during execution of open() are
deferred from delivery until completion of this function.
Errors
If an error occurs, errno is set to one of the following values:
EACCES CAUSE One of the following:
* The calling process does not have search
permission to a component of the pathname.
* The file does not exist and the calling
process does not have write permission to the
parent directory of the file to be created.
* The file exists and the permissions specified
by oflag are denied.
* Both O_TRUNC and O_RDONLY were specified.
* Both O_APPEND and O_RDONLY were specified.
* An MPE/iX lockword is associated with the
file.
ACTION One of the following:
* Make sure that the calling process has search
permission to all directory components of the
pathname.
* Make sure that the calling process has write
permission to the parent directory of the file
to be created.
* Specify valid and compatible flags in oflag.
* Remove the MPE/iX lockword.
EEXCL CAUSE Attempt to open an existing file exclusively failed
because file is already opened.
ACTION Check for ownership of previously opened file. Check
file's permission bits.
Table 4-0. (cont.)
EEXIST CAUSE O_CREAT and O_EXCL are set, and the named file
exists.
ACTION Open the file a different way, or remove the file.
EFAULT CAUSE The system detected a NULL or bad address in
attempting to use the pathname parameter, or the
pathname was not terminated by a null character.
ACTION Make sure that the pointer is correctly initialized.
EIMPL CAUSE One of the following:
* The specified file is not a byte-stream file.
* The pathname began with two slash characters
(//).
* Bits in mode that are not file permission bits
did not contain zeros.
* An attempt was made to create a file in an
MPE/iX account.
* An attempt was made to create a file with a
name that exceeds 16 characters in the root
directory or an MPE/iX group.
ACTION One of the following:
* Open only byte-stream files.
* Do not begin a pathname with two slash
characters (//).
* Set bits in mode that are not file permission
bits to zero.
* Do not create files in an MPE/iX account.
* Do not attempt to create a file with a name
which exceeds 16 characters in the root
directory or an MPE/iX group.
EINVAL CAUSE More than one of the following three open flags were
specified in oflag: O_WRONLY, O_RDONLY, and O_RDWR.
ACTION Specify only one of the open flags in oflag.
EISDIR CAUSE The pathname specifies a directory to be opened.
ACTION Use opendir() to open a directory file.
Table 4-0. (cont.)
EMFILE CAUSE The number of open files and directories would exceed
{OPEN_MAX}, the limit of opened files per process.
ACTION Reduce the number of files and directories opened by
the calling process.
ENAMETOOLONG CAUSE One of the following:
* The length of the pathname exceeds the
{PATH_MAX} limit (defined in the file
<limits.h>).
* A component of the pathname is longer than
{NAME_MAX} (defined in <limits.h>), and
{_POSIX_NO_TRUNC} is in effect for that
directory.
ACTION Make sure that both the component's length and the
full pathname length do not exceed the {NAME_MAX} or
{PATH_MAX} limits.
ENOENT CAUSE The O_CREAT option is not set, and the named file
does not exist; or the O_CREAT option is set, and the
pathname does not exist; or pathname points to an
empty string.
ACTION Specify a valid pathname.
ENOSPC CAUSE Creation of the file would exceed the disk space
limits imposed by the MPE/iX accounting facility, or
there is not enough free disk space to create the
file.
ACTION Extend accounting limits for the directory in which
the file is located, or free up disk space.
ENOTDIR CAUSE A component of the pathname is not a directory.
ACTION Specify a valid pathname.
ESYSERR CAUSE An operating system error has occurred that does not
map directly to any of the above errors.
ACTION Examine the MPE/iX error stack for the type of system
error.
See Also
close(), creat(), dup(), execl(), execv(), <fcntl.h>, lseek(), read(),
<signal.h>, fstat(), stat(), <stat.h>, write(), umask(), POSIX.1 (Section
5.3.1)
MPE/iX 5.0 Documentation