Manpage of TERMIOS
TERMIOS
Index
NAME
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed - get and set
terminal attributes, line control, get and set baud rate
SYNOPSIS
#include <termios.h>
#include <unistd.h>
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions, struct termios *termios_p);
int tcsendbreak(int fd, int duration);
int tcdrain(int fd);
int tcflush(int fd, int queue_selector);
int tcflow(int fd, int action);
int cfmakeraw(struct termios *termios_p);
speed_t cfgetispeed(struct termios *termios_p);
speed_t cfgetospeed(struct termios *termios_p);
int cfsetispeed(struct termios *termios_p, speed_t speed);
int cfsetospeed(struct termios *termios_p, speed_t speed);
DESCRIPTION
The termios functions describe a general terminal interface that is
provided to control asynchronous communications ports.
Many of the functions described here have a fItermios_pfP argument
that is a pointer to a fBtermiosfP structure. This structure contains
at least the following members:
-
tcflag_t fIc_iflagfP; /* input modes */
tcflag_t fIc_oflagfP; /* output modes */
tcflag_t fIc_cflagfP; /* control modes */
tcflag_t fIc_lflagfP; /* local modes */
cc_t fIc_ccfP[fBNCCSfP]; /* control chars */
fIc_iflagfP flag constants:
- IGNBRK
-
Ignore BREAK condition on input.
- BRKINT
-
If fBIGNBRKfP is set, a BREAK is ignored. If it is not set
but fBBRKINTfP is set, then a BREAK causes the input and output
queues to be flushed, and if the terminal is the controlling
terminal of a foreground process group, it will cause a
fBSIGINTfP to be sent to this foreground process group.
When neither fBIGNBRKfP nor fBBRKINTfP are set, a BREAK
reads as a NUL character, except when fBPARMRKfP is set,
in which case it reads as the sequence 377 .
- IGNPAR
-
Ignore framing errors and parity errors.
- PARMRK
-
If fBIGNPARfP is not set, prefix a character with a parity error or
framing error with 377 . If neither fBIGNPARfP nor fBPARMRKfP
is set, read a character with a parity error or framing error
as .
- INPCK
-
Enable input parity checking.
- ISTRIP
-
Strip off eighth bit.
- INLCR
-
Translate NL to CR on input.
- IGNCR
-
Ignore carriage return on input.
- ICRNL
-
Translate carriage return to newline on input (unless fBIGNCRfP is set).
- IUCLC
-
(not in POSIX) Map uppercase characters to lowercase on input.
- IXON
-
Enable XON/XOFF flow control on output.
- IXANY
-
(not in POSIX.1; XSI) Enable any character to restart output.
- IXOFF
-
Enable XON/XOFF flow control on input.
- IMAXBEL
-
(not in POSIX) Ring bell when input queue is full.
Linux does not implement this bit, and acts as if it is always set.
fIc_oflagfP flag constants defined in POSIX.1:
- OPOST
-
Enable implementation-defined output processing.
The remaining fIc_oflagfP flag constants are defined in POSIX 1003.1-2001,
unless marked otherwise.
- OLCUC
-
(not in POSIX) Map lowercase characters to uppercase on output.
- ONLCR
-
(XSI) Map NL to CR-NL on output.
- OCRNL
-
Map CR to NL on output.
- ONOCR
-
Don't output CR at column 0.
- ONLRET
-
Don't output CR.
- OFILL
-
Send fill characters for a delay, rather than using a timed delay.
- OFDEL
-
(not in POSIX) Fill character is ASCII DEL (0177).
If unset, fill character is ASCII NUL.
- NLDLY
-
Newline delay mask. Values are fBNL0fP and fBNL1fP.
- CRDLY
-
Carriage return delay mask.
Values are fBCR0fP, fBCR1fP, fBCR2fP, or fBCR3fP.
- TABDLY
-
Horizontal tab delay mask.
Values are fBTAB0fP, fBTAB1fP, fBTAB2fP, fBTAB3fP (or fBXTABSfP).
A value of TAB3, that is, XTABS, expands tabs to spaces
(with tab stops every eight columns).
- BSDLY
-
Backspace delay mask. Values are fBBS0fP or fBBS1fP.
(Has never been implemented.)
- VTDLY
-
Vertical tab delay mask. Values are fBVT0fP or fBVT1fP.
- FFDLY
-
Form feed delay mask. Values are fBFF0fP or fBFF1fP.
fIc_cflagfP flag constants:
- CBAUD
-
(not in POSIX) Baud speed mask (4+1 bits).
- CBAUDEX
-
(not in POSIX) Extra baud speed mask (1 bit), included in CBAUD.
(POSIX says that the baud speed is stored in the termios structure
without specifying where precisely, and provides
cfgetispeed()
and
cfsetispeed()
for getting at it. Some systems use bits selected by CBAUD in
c_cflag,
other systems use separate fields, e.g.
sg_ispeed
and
sg_ospeed.)
- CSIZE
-
Character size mask.
Values are fBCS5fP, fBCS6fP, fBCS7fP, or fBCS8fP.
- CSTOPB
-
Set two stop bits, rather than one.
- CREAD
-
Enable receiver.
- PARENB
-
Enable parity generation on output and parity checking for input.
- PARODD
-
Parity for input and output is odd.
- HUPCL
-
Lower modem control lines after last process closes the device (hang up).
- CLOCAL
-
Ignore modem control lines.
- LOBLK
-
(not in POSIX) Block output from a noncurrent shell layer.
(For use by fBshlfP.)
- CIBAUD
-
(not in POSIX) Mask for input speeds. The values for the CIBAUD bits are
the same as the values for the CBAUD bits, shifted left IBSHIFT bits.
- CRTSCTS
-
(not in POSIX) Enable RTS/CTS (hardware) flow control.
fIc_lflagfP flag constants:
- ISIG
-
When any of the characters INTR, QUIT, SUSP, or DSUSP are received,
generate the corresponding signal.
- ICANON
-
Enable canonical mode. This enables the special characters
EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT, STATUS, and WERASE, and
buffers by lines.
- XCASE
-
(not in POSIX; not supported under Linux)
If fBICANONfP is also set, terminal is uppercase only.
Input is converted to lowercase, except for characters preceded by .
On output, uppercase characters are preceded by and lowercase
characters are converted to uppercase.
- ECHO
-
Echo input characters.
- ECHOE
-
If fBICANONfP is also set, the ERASE character erases the preceding
input character, and WERASE erases the preceding word.
- ECHOK
-
If fBICANONfP is also set, the KILL character erases the current line.
- ECHONL
-
If fBICANONfP is also set, echo the NL character even if ECHO is not set.
- ECHOCTL
-
(not in POSIX) If fBECHOfP is also set, ASCII control signals other than
TAB, NL, START, and STOP are echoed as ^X, where X is the character with
ASCII code 0x40 greater than the control signal. For example, character
0x08 (BS) is echoed as ^H.
- ECHOPRT
-
(not in POSIX) If fBICANONfP and fBIECHOfP are also set, characters
are printed as they are being erased.
- ECHOKE
-
(not in POSIX) If fBICANONfP is also set, KILL is echoed by erasing
each character on the line, as specified by fBECHOEfP and fBECHOPRTfP.
- DEFECHO
-
(not in POSIX) Echo only when a process is reading.
- FLUSHO
-
(not in POSIX; not supported under Linux)
Output is being flushed. This flag is toggled by typing
the DISCARD character.
- NOFLSH
-
Disable flushing the input and output queues when generating the SIGINT,
SIGQUIT and SIGSUSP signals.
- TOSTOP
-
Send the SIGTTOU signal to the process group of a background process
which tries to write to its controlling terminal.
- PENDIN
-
(not in POSIX; not supported under Linux)
All characters in the input queue are reprinted when
the next character is read. (fBbashfP handles typeahead this way.)
- IEXTEN
-
Enable implementation-defined input processing.
This flag, as well as fBICANONfP must be enabled for the
special characters EOL2, LNEXT, REPRINT, WERASE to be interpreted,
and for the fBIUCLCfP flag to be effective.
The fIc_ccfP array defines the special control characters.
The symbolic indices (initial values) and meaning are:
- VINTR
-
(003, ETX, Ctrl-C, or also 0177, DEL, rubout)
Interrupt character. Send a SIGINT signal.
Recognized when ISIG is set, and then not passed as input.
- VQUIT
-
(034, FS, Ctrl-e)
Quit character. Send SIGQUIT signal.
Recognized when ISIG is set, and then not passed as input.
- VERASE
-
(0177, DEL, rubout, or 010, BS, Ctrl-H, or also #)
Erase character. This erases the previous not-yet-erased character,
but does not erase past EOF or beginning-of-line.
Recognized when ICANON is set, and then not passed as input.
- VKILL
-
(025, NAK, Ctrl-U, or Ctrl-X, or also @)
Kill character. This erases the input since the last EOF or beginning-of-line.
Recognized when ICANON is set, and then not passed as input.
- VEOF
-
(004, EOT, Ctrl-D)
End-of-file character.
More precisely: this character causes the pending tty buffer to be sent
to the waiting user program without waiting for end-of-line.
If it is the first character of the line, the fIread()fP in the
user program returns 0, which signifies end-of-file.
Recognized when ICANON is set, and then not passed as input.
- VMIN
-
Minimum number of characters for non-canonical read.
- VEOL
-
(0, NUL)
Additional end-of-line character.
Recognized when ICANON is set.
- VTIME
-
Timeout in deciseconds for non-canonical read.
- VEOL2
-
(not in POSIX; 0, NUL)
Yet another end-of-line character.
Recognized when ICANON is set.
- VSWTCH
-
(not in POSIX; not supported under Linux; 0, NUL)
Switch character. (Used by fBshlfP only.)
- VSTART
-
(021, DC1, Ctrl-Q)
Start character. Restarts output stopped by the Stop character.
Recognized when IXON is set, and then not passed as input.
- VSTOP
-
(023, DC3, Ctrl-S)
Stop character. Stop output until Start character typed.
Recognized when IXON is set, and then not passed as input.
- VSUSP
-
(032, SUB, Ctrl-Z)
Suspend character. Send SIGTSTP signal.
Recognized when ISIG is set, and then not passed as input.
- VDSUSP
-
(not in POSIX; not supported under Linux; 031, EM, Ctrl-Y)
Delayed suspend character:
send SIGTSTP signal when the character is read by the user program.
Recognized when IEXTEN and ISIG are set, and the system supports
job control, and then not passed as input.
- VLNEXT
-
(not in POSIX; 026, SYN, Ctrl-V)
Literal next. Quotes the next input character, depriving it of
a possible special meaning.
Recognized when IEXTEN is set, and then not passed as input.
- VWERASE
-
(not in POSIX; 027, ETB, Ctrl-W)
Word erase.
Recognized when ICANON and IEXTEN are set, and then not passed as input.
- VREPRINT
-
(not in POSIX; 022, DC2, Ctrl-R)
Reprint unread characters.
Recognized when ICANON and IEXTEN are set, and then not passed as input.
- VDISCARD
-
(not in POSIX; not supported under Linux; 017, SI, Ctrl-O)
Toggle: start/stop discarding pending output.
Recognized when IEXTEN is set, and then not passed as input.
- VSTATUS
-
(not in POSIX; not supported under Linux;
status request: 024, DC4, Ctrl-T).
These symbolic subscript values are all different, except that
VTIME, VMIN may have the same value as VEOL, VEOF, respectively.
(In non-canonical mode the special character meaning is replaced
by the timeout meaning. MIN represents the minimum number of characters
that should be received to satisfy the read. TIME is a decisecond-valued
timer. When both are set, a read will wait until at least one character
has been received, and then return as soon as either MIN characters
have been received or time TIME has passed since the last character
was received. If only MIN is set, the read will not return before
MIN characters have been received. If only TIME is set, the read will
return as soon as either at least one character has been received,
or the timer times out. If neither is set, the read will return
immediately, only giving the currently already available characters.)
tcgetattr()
gets the parameters associated with the object referred by fIfdfP and
stores them in the fBtermiosfP structure referenced by
fItermios_pfP. This function may be invoked from a background process;
however, the terminal attributes may be subsequently changed by a
foreground process.
tcsetattr()
sets the parameters associated with the terminal (unless support is
required from the underlying hardware that is not available) from the
fBtermiosfP structure referred to by fItermios_pfP.
fIoptional_actionsfP specifies when the changes take effect:
- fBTCSANOWfP
-
the change occurs immediately.
- fBTCSADRAINfP
-
the change occurs after all output written to
fd
has been transmitted. This function should be used when changing
parameters that affect output.
- fBTCSAFLUSHfP
-
the change occurs after all output written to the object referred by
fd
has been transmitted, and all input that has been received but not read
will be discarded before the change is made.
tcsendbreak()
transmits a continuous stream of zero-valued bits for a specific
duration, if the terminal is using asynchronous serial data
transmission. If fIdurationfP is zero, it transmits zero-valued bits
for at least 0.25 seconds, and not more that 0.5 seconds. If
fIdurationfP is not zero, it sends zero-valued bits for some
implementation-defined length of time.
If the terminal is not using asynchronous serial data transmission,
fBtcsendbreak()fP returns without taking any action.
tcdrain()
waits until all output written to the object referred to by
fd
has been transmitted.
tcflush()
discards data written to the object referred to by
fd
but not transmitted, or data received but not read, depending on the
value of
queue_selector:
- fBTCIFLUSHfP
-
flushes data received but not read.
- fBTCOFLUSHfP
-
flushes data written but not transmitted.
- fBTCIOFLUSHfP
-
flushes both data received but not read, and data written but not
transmitted.
tcflow()
suspends transmission or reception of data on the object referred to by
fd,
depending on the value of
action:
- fBTCOOFFfP
-
suspends output.
- fBTCOONfP
-
restarts suspended output.
- fBTCIOFFfP
-
transmits a STOP character, which stops the terminal device from transmitting data to the
system.
- fBTCIONfP
-
transmits a START character, which starts the terminal device transmitting data to the
system.
The default on open of a terminal file is that neither its input nor its
output is suspended.
The baud rate functions are provided for getting and setting the values
of the input and output baud rates in the fBtermiosfP structure. The
new values do not take effect
until fBtcsetattr()fP is successfully called.
Setting the speed to fBB0fP instructs the modem to "hang up".
The actual bit rate corresponding to fBB38400fP may be altered with
fBsetserialfP(8).
The input and output baud rates are stored in the fBtermiosfP
structure.
fBcfmakerawfP sets the terminal attributes as follows:
termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|INLCR|IGNCR|ICRNL|IXON);
termios_p->c_oflag &= ~OPOST;
termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
termios_p->c_cflag &= ~(CSIZE|PARENB);
termios_p->c_cflag |= CS8;
cfgetospeed()
returns the output baud rate stored in the fBtermiosfP structure
pointed to by
termios_p.
cfsetospeed()
sets the output baud rate stored in the fBtermiosfP structure pointed
to by fItermios_pfP to fIspeedfP, which must be one of these constants:
B0
B50
B75
B110
B134
B150
B200
B300
B600
B1200
B1800
B2400
B4800
B9600
B19200
B38400
B57600
B115200
B230400
The zero baud rate, fBB0fP,
is used to terminate the connection. If B0
is specified, the modem control lines shall no longer be asserted.
Normally, this will disconnect the line. fBCBAUDEXfP is a mask
for the speeds beyond those defined in POSIX.1 (57600 and above).
Thus, fBB57600fP & fBCBAUDEXfP is nonzero.
cfgetispeed()
returns the input baud rate stored in the fBtermiosfP structure.
cfsetispeed()
sets the input baud rate stored in the fBtermiosfP structure to
speed.
If the input baud rate is set to zero, the input baud rate will be
equal to the output baud rate.
RETURN VALUE
cfgetispeed()
returns the input baud rate stored in the
fBtermiosfP
structure.
cfgetospeed()
returns the output baud rate stored in the fBtermiosfP structure.
All other functions return:
- 0
-
on success.
- -1
-
on failure and set
errno
to indicate the error.
Note that
tcsetattr()
returns success if fIanyfP of the requested changes could be
successfully carried out. Therefore, when making multiple changes
it may be necessary to follow this call with a further call to
tcgetattr()
to check that all changes have been performed successfully.
NOTES
Unix V7 and several later systems have a list of baud rates
where after the fourteen values B0, ..., B9600 one finds the
two constants EXTA, EXTB ("External A" and "External B").
Many systems extend the list with much higher baud rates.
The effect of a nonzero fIdurationfP with fBtcsendbreakfP varies.
SunOS specifies a break of
duration*N
seconds, where fINfP is at least 0.25, and not more than 0.5.
Linux, AIX, DU, Tru64 send a break of
duration
milliseconds.
FreeBSD and NetBSD and HP-UX and MacOS ignore the value of
duration.
Under Solaris and Unixware,
tcsendbreak
with nonzero
duration
behaves like
tcdrain.
SEE ALSO
stty(1),
setserial(8)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- NOTES
-
- SEE ALSO
-
|