termios(2) SYSTEM CALLS termios(2)
NAME
termios: tcgetattr, tcsetattr, tcsendbreak, tcdrain,
tcflush, tcflow, cfgetospeed, cfgetispeed, cfsetispeed,
cfsetospeed, tcgetpgrp, tcsetpgrp, tcgetsid - general termi-
nal interface
SYNOPSIS
#include <termios.h>
int tcgetattr(int fildes, struct termios *termios_p);
int tcsetattr(int fildes, int optional_actions,
const struct termios *termios_p);
int tcsendbreak(int fildes, int duration);
int tcdrain(int fildes);
int tcflush(int fildes, int queue_selector);
int tcflow(int fildes, int action);
speed_t cfgetospeed(struct termios *termios_p);
int cfsetospeed(const struct termios *termios_p, speed_t speed);
speed_t cfgetispeed(struct termios *termios_p);
int cfsetispeed(const struct termios *termios_p, speed_t speed);
#include <sys/types.h>
#include <termios.h>
pid_t tcgetpgrp(int fildes);
int tcsetpgrp(int fildes, pid_t pgid);
pid_t tcgetsid(int fildes);
DESCRIPTION
These functions describe a general terminal interface for
controlling asynchronous communications ports. A more
detailed overview of the terminal interface can be found in
termio(7), which also describes an ioctl(2) interface that
provides the same functionality. However, the function
interface described here is the preferred user interface.
Many of the functions described here have a termios_p argu-
ment that is a pointer to a termios structure. This struc-
ture contains the following members:
tcflag_t c_iflag; /* input modes */
tcflag_t c_oflag; /* output modes */
tcflag_t c_cflag; /* control modes */
tcflag_t c_lflag; /* local modes */
cc_t c_cc[NCCS]; /* control chars */
These structure members are described in detail in ter-
mio(7).
Get and Set Terminal Attributes
The tcgetattr function gets the parameters associated with
the object referred by fildes and stores them in the termios
structure referenced by termios_p. This function may be
invoked from a background process; however, the terminal
attributes may be subsequently changed by a foreground
1
termios(2) SYSTEM CALLS termios(2)
process.
The tcsetattr function sets the parameters associated with
the terminal (unless support is required from the underlying
hardware that is not available) from the termios structure
referenced by termios_p as follows:
If optional_actions is TCSANOW, the change occurs
immediately. If optional_actions is TCSADRAIN, the
change occurs after all output written to fildes has
been transmitted. This function should be used when
changing parameters that affect output. If
optional_actions is TCSAFLUSH, the change occurs after
all output written to the object referred by fildes has
been transmitted, and all input that has been received
but not read is discarded before the change is made.
The symbolic constants for the values of optional_actions
are defined in <termios.h>.
Line Control
If the terminal is using asynchronous serial data transmis-
sion, the tcsendbreak function causes transmission of a con-
tinuous stream of zero-valued bits for a specific duration.
If duration is zero, it causes transmission of zero-valued
bits for at least 0.25 seconds, and not more than 0.5
seconds. If duration is not zero, it behaves in a way simi-
lar to tcdrain.
If the terminal is not using asynchronous serial data
transmission, the tcsendbreak function sends data to gen-
erate a break condition or returns without taking any
action.
The tcdrain function waits until all output written to the
object referred to by fildes has been transmitted.
The tcflush function discards data written to the object
referred to by fildes but not transmitted, or data received
but not read, depending on the value of queue_selector:
If queue_selector is TCIFLUSH, it flushes data received
but not read. If queue_selector is TCOFLUSH, it
flushes data written but not transmitted. If
queue_selector is TCIOFLUSH, it flushes both data
received but not read, and data written but not
transmitted.
The tcflow function suspends transmission or reception of
data on the object referred to by fildes, depending on the
value of action:
If action is TCOOFF, it suspends output. If action is
TCOON, it restarts suspended output. If action if TCI-
OFF, the system transmits a STOP character, which
2
termios(2) SYSTEM CALLS termios(2)
causes the terminal device to stop transmitting data to
the system. If action is TCION, the system transmits a
START character, which causes the terminal device to
start transmitting data to the system.
Get and Set Baud Rate
The baud rate functions get and set the values of the input
and output baud rates in the termios structure. The effects
on the terminal device described below do not become effec-
tive until the tcsetattr function is successfully called.
The input and output baud rates are stored in the termios
structure. The values shown in the table are supported.
The names in this table are defined in <termios.h>.
Name Description Name Description
____________________________________________
B0 Hang up B600 600 baud
B50 50 baud B1200 1200 baud
B75 75 baud B1800 1800 baud
B110 110 baud B2400 2400 baud
B134 134.5 baud B4800 4800 baud
B150 150 baud B9600 9600 baud
B200 200 baud B19200 19200 baud
B300 300 baud B38400 38400 baud
cfgetospeed gets the output baud rate and stores it in the
termios structure pointed to by termios_p.
cfsetospeed sets the output baud rate stored in the termios
structure pointed to by termios_p to speed. The zero baud
rate, B0, is used to terminate the connection. If B0 is
specified, the modem control lines are no longer be
asserted. Normally, this disconnects the line.
cfgetispeed gets the input baud rate and stores it in the
termios structure pointed to by termios_p.
cfsetispeed sets the input baud rate stored in the termios
structure pointed to by termios_p to speed. If the input
baud rate is set to zero, the input baud rate is specified
by the value of the output baud rate. Both cfsetispeed and
cfsetospeed return a value of zero if successful and -1 to
indicate an error. Attempts to set unsupported baud rates
are ignored. This refers both to changes to baud rates not
supported by the hardware, and to changes setting the input
and output baud rates to different values if the hardware
does not support this.
Get and Set Terminal Foreground Process Group ID
tcsetpgrp sets the foreground process group ID of the termi-
nal specified by fildes to pgid. The file associated with
fildes must be the controlling terminal of the calling
3
termios(2) SYSTEM CALLS termios(2)
process and the controlling terminal must be currently asso-
ciated with the session of the calling process. pgid must
match a process group ID of a process in the same session as
the calling process.
tcgetpgrp returns the foreground process group ID of the
terminal specified by fildes. tcgetpgrp is allowed from a
process that is a member of a background process group; how-
ever, the information may be subsequently changed by a pro-
cess that is a member of a foreground process group.
Get Terminal Session ID
tcgetsid returns the session ID of the terminal specified by
fildes.
DIAGNOSTICS
On success, tcgetpgrp returns the process group ID of the
foreground process group associated with the specified ter-
minal. Otherwise, it returns -1 and sets errno to indicate
the error.
On success, tcgetsid returns the session ID associated with
the specified terminal. Otherwise, it returns -1 and sets
errno to indicate the error.
On success, all other functions return a value of 0. Other-
wise, they return -1 and set errno to indicate the error.
All of the functions fail if one of more of the following is
true:
EBADF The fildes argument is not a valid file
descriptor.
ENOTTY The file associated with fildes is not a ter-
minal.
tcsetattr also fails if the following is true:
EINVAL The optional_actions argument is not a proper
value, or an attempt was made to change an
attribute represented in the termios struc-
ture to an unsupported value.
tcsendbreak also fails if the following is true:
EINVAL The device does not support the tcsendbreak
function.
tcdrain also fails if one or more of the following is true:
EINTR A signal interrupted the tcdrain function.
4
termios(2) SYSTEM CALLS termios(2)
EINVAL The device does not support the tcdrain func-
tion.
tcflush also fails if the following is true:
EINVAL The device does not support the tcflush func-
tion or the queue_selector argument is not a
proper value.
tcflow also fails if the following is true:
EINVAL The device does not support the tcflow func-
tion or the action argument is not a proper
value.
tcgetpgrp also fails if the following is true:
ENOTTY the calling process does not have a control-
ling terminal, or fildes does not refer to
the controlling terminal.
tcsetpgrp also fails if the following is true:
EINVAL pgid is not a valid process group ID .
ENOTTY the calling process does not have a control-
ling terminal, or fildes does not refer to
the controlling terminal, or the controlling
terminal is no longer associated with the
session of the calling process.
EPERM pgid does not match the process group of an
existing process in the same session as the
calling process.
tcgetsid also fails if the following is true:
EACCES fildes is a terminal that is not allocated to
a session.
SEE ALSO
setsid(2), setpgid(2).
termio(7) in the System Administrator's Reference Manual.
5