FCNTL(2) — UNIX Programmer’s Manual
NAME
fcntl − file control
SYNOPSIS
#include <fcntl.h>
res = fcntl(fd, cmd, arg)
int res;
int fd, cmd, arg;
DESCRIPTION
Fcntl performs a variety of functions on open descriptors. The argument fd is an open descriptor to be operated on by cmd as follows:
F_DUPFD Return a new descriptor as follows:
Lowest numbered available descriptor greater than or equal to arg.
References the same object as the original descriptor.
New descriptor shares the same file pointer if the object was a file.
Same access mode (read, write or read/write).
Same file status flags (i.e., both descriptors share the same file status flags).
The close-on-exec flag associated with the new descriptor is set to remain open across execve(2) system calls.
F_GETFD Get the close-on-exec flag associated with the descriptor fd. If the low-order bit is 0, the file will remain open across exec, otherwise the file will be closed upon execution of exec.
F_SETFD Set the close-on-exec flag associated with fd to the low order bit of arg (0 or 1 as above).
F_GETFL Get descriptor status flags.
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; process groups are specified by supplying arg as negative, otherwise arg is interpreted as a process ID.
The SIGIO facilities are enabled by setting the FASYNC flag with F_SETFL.
RETURN VALUE
Upon successful completion, the value returned depends on cmd as follows:
F_DUPFDA new descriptor.
F_GETFDValue of flag (only the low-order bit is defined).
F_GETFLValue of flags.
F_GETOWN Value of descriptor owner.
otherValue other than −1.
Otherwise, a value of −1 is returned and errno is set to indicate the error.
ERRORS
Fcntl will fail if one or more of the following are true:
EBADF Fd is not a valid open descriptor.
EMFILE Cmd is F_DUPFD and the maximum allowed number of descriptors are currently open.
EINVAL Either cmd is invalid, or cmd is F_DUPFD and arg is negative or greater than the maximum allowable number (see getdtablesize(2)).
SEE ALSO
close(2), execve(2), getdtablesize(2), open(2V), sigvec(2)
7th Edition — 16 July 1986