TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
NAME
termio - general terminal interface
DESCRIPTION
All of the asynchronous communications ports use the same
general interface, no matter what hardware is involved.
This section discusses the common features of that inter-
face.
When a terminal file is opened, it normally causes the pro-
cess to wait until a connection is established. In prac-
tice, users' programs seldom open these files; they are
opened by getty, and become a user's standard input, output,
and error files. The very first terminal file opened by the
process group leader of a terminal file not already associ-
ated with a process group becomes the ``control terminal''
for that process group. The control terminal plays a spe-
cial role in handling quit and interrupt signals, as dis-
cussed below. The control terminal is inherited by a child
process during a fork(2). A process can break this associa-
tion by changing its process group using setpgrp(2).
A terminal associated with one of these files ordinarily
operates in full duplex mode. Characters may be typed at
any time, even while output is occurring, and are only lost
when the system's character input buffers become completely
full, which is rare, or when the user has accumulated the
maximum allowable number of input characters that have not
yet been read by some program. Currently, this limit is 256
characters. When the input limit is reached, all the saved
characters are thrown away without notice.
Normally, terminal input is processed in units of lines. A
line is delimited by a newline (ASCII LF), and end-of-file
(ASCII EOT) character, or an end-of-line character. This
means that a program attempting to read will be suspended
until an entire line has been typed. Also, no matter how
many characters are requested in the read call, one line, at
most, will be returned. It is not, however, necessary to
read a whole line at once; any number of characters may be
requested in a read, even one, without losing information.
During input, erase and kill processing is performed nor-
mally. By default, the character # erases the last charac-
ter typed, except that it will not erase beyond the begin-
ning of the line. By default, the character @ kills
(deletes) the entire input line, and optionally outputs a
newline character. Both these characters operate on a keys-
troke basis, independently of any backspacing or tabbing
that may have been done. Both the erase and kill characters
may be entered literally by preceding them with the escape
character (\). In this case the escape character is not
Printed 5/10/85 TERMIO-1
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
read. The default erase and kill characters may also be
changed.
Certain characters have special functions on input. These
functions and their default character values are summarized
below.
INTR (Rubout or ASCII DEL) generates an interrupt signal
which is sent to all processes with the associated con-
trol terminal. Normally, each such process is forced
to terminate, but arrangements can be made to ignore
the signal or to receive a trap at an agreed-upon loca-
tion; see signal(2).
QUIT (CTRL | or ASCII FS) generates a quit signal. Its
treatment is identical to the interrupt signal, except
that, unless a receiving process has made other
arrangements, it will not only be terminated but a core
image file (called core) will be created in the current
working directory.
SWITCH
(CTRL Z or ASCII SUB) is used by the job control facil-
ity, shl, to change the current layer to the control
layer.
ERASE
(#) erases the preceding character. It will not erase
beyond the start of a line, as delimited by a NL, EOF,
or EOT character.
KILL (@) deletes the entire line, as delimited by a NL, EOF,
or EOT character.
EOF (CTRL D or ASCII EOT) may be used to generate an end-
of-file
from a terminal. When received, all the characters
waiting to be read are immediately passed to the pro-
gram, without waiting for a newline, and the EOF is
discarded. Thus, if there are no characters waiting,
which is to say that the EOF occurred at the beginning
of a line, zero characters will be passed back, which
is the standard end-of-file indication.
NL (ASCII LF) is the normal line delimiter. It cannot be
changed or escaped. EOL (ASCII NULL) is an additional
line delimiter, like NL. It is not normally used.
STOP (CTRL S or ASCII DC3) can be used to suspend output
temporarily. It is used with CRT terminals, to prevent
output from disappearing before it can be read. While
output is suspended, STOP characters are ignored and
TERMIO-2 Printed 5/10/85
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
not read.
START
(CTRL Q or ASCII DC1) can be used to resume output that
was suspended by a STOP character. While output is not
suspended, START characters are ignored and not read.
The start/stop characters cannot be changed or escaped.
The character values for INTR, QUIT, SWITCH, ERASE, KILL,
EOF, and EOL may be changed to suit individual tastes. The
ERASE, KILL, and EOF characters may be escaped with a
backslash (\).
When the carrier signal from the data set drops, a hang-up
signal is sent to all processes that have this terminal as
the control terminal. Unless other arrangements have been
made, this signal causes the processes to terminate. If the
hang-up signal is ignored, any subsequent read returns with
an end-of-file indication. Thus, programs that read a ter-
minal and test for end-of-file can terminate appropriately
when hung up on.
When one or more characters are written, they are transmit-
ted to the terminal as soon as previously written characters
have finished typing. Input characters are echoed by put-
ting them in the output queue as they arrive. If a process
produces characters more rapidly than they can be typed, it
will be suspended when its output queue exceeds some limit.
When the queue has drained down to some threshold, the pro-
gram is resumed.
Several ioctl(2) calls apply to terminal files. The primary
call use the following structure, defined in <termio.h>.
#define NCC 8
struct termio {
unsigned short c_iflag; /*input modes*/
unsigned short c_oflag; /*output modes*/
unsigned short c_cflag; /*control modes*/
unsigned short c_lflag; /*local modes*/
char c_line; /*line discipline*/
unsigned char c_cc[NCC}; /*input modes*/
};
The special control characters are defined by the array
c_cc. The relative positions and initial values for each
function are as follows:
0 VINTR DEL
1 VQUIT FS
2 VERASE #
3 VKILL @
Printed 5/10/85 TERMIO-3
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
4 VEOF EOT
5 VEOL NUL
6 reserved
7 SWTCH
The c_iflag field describes the basic terminal input con-
trol:
IGNBRK 0000001 Ignore break condition
BRKINT 0000002 Signal interrupt on break
IGNPAR 0000004 Ignore characters with parity errors
PARMRK 0000010 Mark parity errors
INPCK 0000020 Enable input parity check
ISTRIP 0000040 Strip character
INLCR 0000100 Map NL to CR on input
IGNCR 0000200 Ignore CR
ICRNL 0000400 Map CR to NL on input
IUCLC 0001000 Map uppercase to lowercase on input
IXON 0002000 Enable start/stop output control
IXANY 0004000 Enable any character to restart output
IXOFF 0010000 Enable start/stop input control
If IGNBRK is set, the break condition (a character framing
error with data all zeros) is ignored, that is, not put on
the input queue and therefore not read by any process. Oth-
erwise, if BRKINT is set, the break condition will generate
an interrupt signal and flush both the input and output
queues. If IGNPAR is set, characters with other framing and
parity errors are ignored.
If PARMRK is set, a character with a framing or parity error
which is not ignored is read as the three character
sequence: 0377, 0, X, where X is the data of the character
received in error. To avoid ambiguity in this case, if
ISTRIP is not set, a valid character of 0377 is read as
0377, 0377. If PARMRK is not set, a framing or parity error
which is not ignored is read as the character NUL (0).
If INPCK is set, input parity checking is enabled. If INPCK
is not set, input parity checking is disabled. This allows
output parity generation without input parity errors.
If ISTRIP is set, valid input characters are first stripped
to seven bits; otherwise, all eight bits are processed.
If INCLR is set, a received NL character is translated into
a CR character. If IGNCR is set, a received CR character is
not read. Otherwise, if ICRNL is set, a received CR charac-
ter is translated into a NL character.
If IUCLC is set, a received uppercase letter character is
translated into the corresponding lowercase character.
TERMIO-4 Printed 5/10/85
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
If IXON is set, start/stop output control is enabled. A
received STOP character will suspend output, and a received
START character will restart output. All start/stop charac-
ters are ignored and not read. If IXANY is set, any input
character will restart output that has been suspended.
If IXOFF is set, the system will transmit START/STOP charac-
ters when the input queue is nearly empty/full.
The initial input control value is all bits clear.
The c_oflag field specifies the system's treatment of out-
put.
OPOST 0000001 Postprocess output
OLCUC 0000002 Map lowercase to upper on output
ONLCR 0000004 Map NL to CR-NL on output
OCRNL 0000010 Map CR to NL on output
ONOCR 0000020 No CR output at column 0
ONLRET 0000040 NL performs CR function
OFILL 0000100 Use fill characters for delay
OFDEL 0000200 Fill is DEL, else NUL
NLDLY 0000400 Select newline delays
NL0 0
NL1 0000400
CRDLY 0003000 Select carriage return delays:
CR0 0
CR1 0001000
CR2 0002000
CR3 0003000
TABDLY 0014000 Select horizontal tab delays:
TAB0 0
TAB1 0004000
TAB2 0010000
TAB3 0014000 Expand tabs to spaces
BSDLY 0020000 Select backspace delays:
BS0 0
BS1 0020000
VTDLY 0040000 Select vertical tab delays:
VT0 0
VT1 0040000
FFDLY 0100000 Select form feed delays:
FF0 0
FF1 0100000
If OPOST is set, output characters are post-processed as
indicated by the remaining flags; otherwise, characters are
transmitted without change.
If OLCUC is set, a lowercase letter character is transmitted
as the corresponding uppercase letter. This function is
often used in conjunction with IUCLC.
Printed 5/10/85 TERMIO-5
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
If ONLCR is set, the NL character is transmitted as the CR-
NL character pair. If OCRNL is set, the CR character is
transmitted as the NL character. If ONOCR is set, no CR
character is transmitted when at column 0 (first position).
If ONLRET is ste, the NL character is assumed to perform the
carriage retun function; the column pointer will be set to
zero and the delays specified for CR will be used. Other-
wise, the NL character is assumed to perform the line feed
function only; the column pointer will remain unchanged.
The column pointer is also set to zero if the CR character
is actually transmitted.
The delay bits specify how long transmission stops to allow
for mechanical or other movement when certain characters are
sent to the terminal. In all cases, a value of zero indi-
cates no delay. If OFILL is set, fill characters will be
transmitted for delay instead of a timed delay. This is
useful for high baud rate terminals, which need only minimal
delay. If OFDEL is set, the fill character is DEL; other-
wise, it is NUL.
If a form feed or vertical tab delay is specified, it lasts
for about two seconds.
Newline delay lasts about 0.10 seconds. If ONLRET is set,
the carriage return delays are used instead of the newline
delays. If OFILL is set, two fill characters will be
transmitted.
Carriage return delay type 1 depends on the current column
position; type 2 is about 0.10 seconds; and type 3 is about
0.15 seconds. If OFILL is set, delay type 1 transmits two
fill characters, and type 2, four fill characters.
Horizontal tab delay type 1 depends on the current column
position; type 2 is about 0.10 seconds. Type 3 specifies
that tabs are to be expanded into spaces. If OFILL is set,
two fill characters will be transmitted for any delay.
Backspace delay lasts about 0.05 seconds. If OFILL is set,
one fill character will be transmitted.
The actual delays depend on line speed and system load.
The initial output control value is all bits clear.
The c_cflag field describes the hardware control of the ter-
minal:
CBAUD 0000017 Baud rate:
B0 0 Hang up
B50 0000001 50 baud
TERMIO-6 Printed 5/10/85
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
B75 0000002 75 baud
B110 0000003 110 baud
B134 0000004 134.5 baud
B150 0000005 150 baud
B200 0000006 200 baud
B300 0000007 300 baud
B600 0000010 600 baud
B1200 0000011 1200 baud
B1800 0000012 1800 baud
B2400 0000013 2400 baud
B4800 0000014 4800 baud
B9600 0000015 9600 baud
EXTA 0000016 External A
EXTB 0000017 External B
CSIZE 0000060 Character size:
CS5 0 5 bits
CS6 0000020 6 bits
CS7 0000040 7 bits
CS8 0000060 8 bits
CSTOPB 0000100 Send two stop bits, else one
CREAD 0000200 Enable receiver
PARENB 0000400 Parity enable
PARODD 0001000 Odd parity, else even
HUPCL 0002000 Hang up on last close
CLOCAL 0004000 Local line, else dialup
LOBLK 0010000 Block layer output
The CBAUD bits specify the baud rate. The zero baud rate is
used to hang up the connection. If B0 is specified, the
Data Terminal Ready signal will not be asserted. Normally,
this will disconnect the line. For any particular hardware,
impossible speed changes are ignored.
The CSIZE bits specify the character size in bits for both
transmission and reception. This size does not include the
parity bit, if any. If CSTOPB is set, two stop bits are
used; otherwise, one stop bit is used. For example, at 110
baud, two stop bits are required.
If PARENB is set, parity generation and detection is enabled
and a parity bit is added to each character. If parity is
enabled, the PARODD flag specifies odd parity if set; other-
wise, even parity is used.
If CREAD is set, the receiver is enabled. Otherwise, no
characters will be received.
If HUPCL is set, the line will be disconnected when the last
process with the line open closes it or terminates. That
is, the Data Terminal Ready signal will not be asserted.
Printed 5/10/85 TERMIO-7
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
If LOBLK is set, the output of a job control layer will be
blocked when it is not the current layer. Otherwise, the
output generated by that layer will be multiplexed onto the
current layer.
The initial hardware control value after open is B300, CS8,
CREAD, HUPCL.
The c_lflag field of the argument structure is used by the
line discipline to control terminal functions. The basic
line discipline (0) provides the following settings.
ISIG 0000001 Enable signals
ICANON 0000002 Canonical input (erase and kill processing)
XCASE 0000004 Canonical upper/lowercase presentation
ECHO 0000010 Enable echo
ECHOE 0000020 Echo erase character as BS-SP-BS
ECHOK 0000040 Echo NL after kill character
ECHONL 0000100 Echo NL
NOFLSH 0000200 Disable flush after interrupt or quit
If ISIG is set, each input character is checked against the
special control characters INTR, SWTCH, and QUIT. If an
input character matches one of these control characters, the
function associated with that character is performed. If
ISIG is not set, no checking is done. Thus, these special
input functions are possible only if ISIG is set. These
functions may be disabled individually by changing the value
of the control character to an unlikely or impossible value.
If ICANON is set, canonical processing is enabled. This
enables the erase and kill edit functions, and the assembly
of input characters into lines delimited by NL, EOF, and
EOL. If ICANON is not set, read requests are satisfied
directly from the input queue. A read will not be satisfied
until at least MIN characters have been received or the
timeout value TIME has expired between characters. This
allows fast bursts of input to be read efficiently while
still allowing single character input. The MIN and TIME
values are stored in the position for the EOF and EOL char-
acters, respectively. The time value represents tenths of
seconds.
If XCASE is set, and if ICANON is set, an uppercase letter
is accepted on input by preceding it with a character, and
is output preceded by a character. In this mode, the fol-
lowing escape sequences are generated on output and accepted
on input:
for: use:
` \'
TERMIO-8 Printed 5/10/85
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
| \!
~ \^
{ \(
} \)
\ \\
If ECHO is set, characters are echoed as received.
When ICANON is set, the following echo functions are possi-
ble. If ECHO and ECHOE are set, the erase character is
echoed as ASCII BS-SP-BS, which will clear the last charac-
ter from a CRT screen. If ECHOE is set and ECHO is not set,
the erase character will be echoed as ASCII SP-BS. If ECHOK
is set, the NL character will be echoed after the kill char-
acter to emphasize that the line will be deleted. Note that
an escape character preceding the erase or kill character
removes any special function. If ECHONL is set, the NL
character will be echoed even if ECHO is not set. This is
useful for terminals set to local echo (so-called half-
duplex). Unless escaped, the EOF character is not echoed.
Because EOT is the default EOF character, this prevents ter-
minals that respond to EOT from hanging up.
If NOFLSH is set, the normal flush of input and output
queues associated with the quit, switch, and interrupt char-
acters will not be done.
The initial line discipline control value is all bits clear.
The primary ioctl(2) system calls have the form:
ioctl (fildes, command, arg)
struct termio *arg;
The commands using this form are:
TCGETA
Get the parameters associated with the terminal and
store in the termio structure referenced by arg.
TCSETA
Set the parameters associated with the terminal from
the structure referenced by arg. The change is immedi-
ate.
TCSETAW
Wait for the output to drain before setting the new
parameters. This form should be used when changing
parameters that will affect output.
TCSETAF
Printed 5/10/85 TERMIO-9
TERMIO(5) DOMAIN/IX Reference Manual (SYS5) TERMIO(5)
Wait for the output to drain, then flush the input
queue and set the new parameters.
Additional ioctl(2) calls have the form:
ioctl (fildes, command, arg)
int arg;
The commands using this form are:
TCSBRK
Wait for the output to drain. If arg is zero, then
send a break (zero bits for 0.25 seconds).
TCXONC
Start/stop control. If arg is zero, suspend output; if
1, restart suspended output.
TCFLSH
If arg is zero, flush the input queue; if 1, flush the
output queue; if 2, flush both the input and output
queues.
RELATED INFORMATION
stty(1), fork(2), ioctl(2), setpgrp(2), signal(2)
TERMIO-10 Printed 5/10/85