The open function creates and returns a new file descriptor
for the file named by filename. Initially, the file position
indicator for the file is at the beginning of the file. The argument
mode is used only when a file is created, but it doesn't hurt
to supply the argument in any case.
The flags argument controls how the file is to be opened. This is
a bit mask; you create the value by the bitwise OR of the appropriate
parameters (using the | operator in C).
See File Status Flags, for the parameters available.
The normal return value from open is a non-negative integer file
descriptor. In the case of an error, a value of -1 is returned
instead. In addition to the usual file name errors (see File
Name Errors), the following errno error conditions are defined
for this function:
EACCES
- The file exists but is not readable/writeable as requested by the flags
argument, the file does not exist and the directory is unwriteable so
it cannot be created.
EEXIST
- Both
O_CREAT and O_EXCL are set, and the named file already
exists.
EINTR
- The
open operation was interrupted by a signal.
See Interrupted Primitives.
EISDIR
- The flags argument specified write access, and the file is a directory.
EMFILE
- The process has too many files open.
The maximum number of file descriptors is controlled by the
RLIMIT_NOFILE resource limit; see Limits on Resources.
ENFILE
- The entire system, or perhaps the file system which contains the
directory, cannot support any additional open files at the moment.
(This problem cannot happen on the GNU system.)
ENOENT
- The named file does not exist, and
O_CREAT is not specified.
ENOSPC
- The directory or file system that would contain the new file cannot be
extended, because there is no disk space left.
ENXIO
O_NONBLOCK and O_WRONLY are both set in the flags
argument, the file named by filename is a FIFO (see Pipes and
FIFOs), and no process has the file open for reading.
EROFS
- The file resides on a read-only file system and any of
O_WRONLY ,
O_RDWR , and O_TRUNC are set in the flags argument,
or O_CREAT is set and the file does not already exist.
If on a 32 bit machine the sources are translated with
_FILE_OFFSET_BITS == 64 the function open returns a file
descriptor opened in the large file mode which enables the file handling
functions to use files up to 2^63 bytes in size and offset from
-2^63 to 2^63. This happens transparently for the user
since all of the lowlevel file handling functions are equally replaced.
This function is a cancellation point in multi-threaded programs. This
is a problem if the thread allocates some resources (like memory, file
descriptors, semaphores or whatever) at the time open is
called. If the thread gets cancelled these resources stay allocated
until the program ends. To avoid this calls to open should be
protected using cancellation handlers.
The open function is the underlying primitive for the fopen
and freopen functions, that create streams.
|