term% cat index.txt IOCTL(2) System Calls Manual IOCTL(2)
NAME
ioctl, stty, gtty - miscellaneous stream control operations
SYNOPSIS
#include <sgtty.h>
ioctl(fildes, request, argp)
struct sgttyb *argp;
stty(fildes, argp)
struct sgttyb *argp;
gtty(fildes, argp)
struct sgttyb *argp;
DESCRIPTION
Ioctl performs a variety of functions on special files and streams.
The writeups of various devices in section 4 discuss how ioctl applies
to them.
For certain status setting and status inquiries about terminal devices,
the functions stty and gtty are equivalent to
ioctl(fildes, TIOCSETP, argp);
ioctl(fildes, TIOCGETP, argp);
respectively; see ttyld(4).
The following two standard calls, however, apply to any open file. The
defined constant NULL has value 0.
ioctl(fildes, FIOCLEX, NULL);
ioctl(fildes, FIONCLEX, NULL);
The first causes the file to be closed automatically upon a successful
exec(2); the second causes the file to be left open.
The following call applies to any stream file descriptor:
ioctl(fildes, FIONREAD, &count);
It returns, in the integer count, the number of characters available
for reading from fildes.
The following calls provide an advisory file locking facility, and ap‐
ply to any open file:
ioctl(fildes, FIOALOCK, NULL);
ioctl(fildes, FIOAUNLOCK, NULL);
ioctl(fildes, FIOAISLOCK, NULL);
FIOALOCK either sets an advisory lock, or indicates that this file is
already locked by returning -1, with errno set to EPERM.
FIOAUNLOCK either clears an advisory lock, or indicates that the file
is locked by another instance of open by returning -1, with errno set
to EPERM.
FIOAISLOCK returns 0 for a file with no advisory lock set, 1 for a file
with an advisory lock set using another instance of open, or 2 for a
file with an advisory lock set on the current instance of open. File
descriptors belong to the same instance when they are copied by dup(2)
or fork(2). Locks are detectable only through these calls, and have no
effect on IO or ability to open files.
SEE ALSO
stty(1), ttyld(4), proc(4), exec(2)
DIAGNOSTICS
Except where otherwise stated, 0 is returned if the call is successful;
-1 if the file descriptor does not refer to the kind of file for which
it was intended, or if request attempts to modify the state of an un‐
writable file.
BUGS
Strictly speaking, since ioctl may be extended in different ways to de‐
vices with different properties, argp should have an open-ended decla‐
ration like
union { struct sgttyb ...; ... } *argp;
The important thing is that the size is fixed by `struct sgttyb'.
Ioctl requests vary among UNIX systems; undisciplined use is likely to
compromise portability.
IOCTL(2)