FCNTL(2)
NAME
fcntl − file control
USAGE
#include <fcntl.h>
res = fcntl(fd, cmd, arg) int res; int fd, cmd, arg;
DESCRIPTION
Fcntl provides various types of control over file descriptors. Several varieties of cmd are provided, which operate on fd as follows.
F_DUPFD Return a new descriptor that:
is the lowest-numbered available descriptor greater than or equal to arg, references the same object as the original fd, shares the same file pointer if the object was a file, has the same access mode (read, write or read/write) as the original fd, has the same file-status flags (i.e., both file descriptors share the same file status flags), sets the close-on-exec flag associated with the new file descriptor to remain open across execve(2) system calls.
F_GETFD Get the close-on-exec flag associated with the file descriptor fd. If the low-order bit is zero, the file will remain open across exec; otherwise, the file will close upon execution of exec.
F_SETFD Set the close-on-exec flag associated with fd to the low-order bit of arg (zero or 1, as above).
F_GETFL Get descriptor status flags, as described below.
F_SETFL Set descriptor status flags.
F_GETOWN Get the process ID or process group currently receiving SIGIO and SIGURG signals; process groups are returned as negative values.
F_SETOWN Set the process or process group to receive SIGIO and SIGURG signals; you can specify process groups by supplying a negative arg; otherwise arg is interpreted as a process ID.
The flags for the F_GETFL and F_SETFL flags are as follows:
FNDELAY Non-blocking I/O; if no data is available to a read(2) call, or if a write(2) operation would block, the call returns -1 and sets errno to the value EWOULDBLOCK.
FAPPEND Force each write to append at the end of file (corresponds to the O_APPEND flag of open(2).)
RETURN VALUE
The value returned upon successful completion depends on cmd as follows:
F_DUPFD returns a new file descriptor.
F_GETFD returns the value of the close-on-exec flag (only the low-order bit is defined).
F_GETFL returns the values of the applicable flags.
F_GETOWN
returns the value of file descriptor owner.
All others return some value other than -1
Otherwise, fcntl returns -1 and sets errno as indicated below.
ERRORS
Fcntl will fail if one or more of the following are true:
[EBADF] Fd is not a valid open file descriptor.
[EMFILE] Cmd is F_DUPFD and the maximum allowed number of file descriptors are currently open.
[EINVAL] Cmd is F_DUPFD and arg is negative or greater than the maximum allowable number (see getdtablesize(2)).