termio(7) termio(7)
NAME [Toc] [Back]
termio, termios - general terminal interface
DESCRIPTION [Toc] [Back]
All HP-UX asynchronous communications ports use the same general
interface, regardless of what hardware is involved. Network
connections such as rlogin (see rlogin(1) use the pseudo-terminal
interface (see pty(7).
This discussion centers around the common features of this interface.
Opening a Terminal File [Toc] [Back]
When a terminal file is opened, it normally causes the process to wait
until a connection is established. In practice, users' programs
seldom open these files; they are opened by special programs such as
getty (see getty(1M)) and become a user's standard input, standard
output, and standard error files.
If both the O_NDELAY and O_NONBLOCK flags (see open(2)) are clear, an
open blocks until the type of modem connection requested (see
modem(7)) is completed. If either the O_NDELAY or O_NONBLOCK flag is
set, an open succeeds and return immediately without waiting for the
requested modem connection to complete. The CLOCAL flag (see Control
Modes) can also affect open(2).
Process Groups [Toc] [Back]
A terminal can have a foreground process group associated with it.
This foreground process group plays a special role in handling
signal-generating input characters.
Command interpreter processes can allocate the terminal to different
jobs (process groups) by placing related processes in a single process
group and associating this process group with the terminal. A
terminal's foreground process group can be set or examined by a
process, assuming that the permission requirements are met (see
tcsetpgr
). The terminal interface aids in this
allocation by restricting access to the terminal by processes that are
not in the foreground process group.
A process group is considered orphaned when the parent of every member
of the process group is either itself a member of the process group or
is not a member of the group's session (see Sessions).
Sessions [Toc] [Back]
A process that creates a session (see setsid(2) or setpgrp(2)) becomes
a session leader. Every process group belongs to exactly one session.
A process is considered to be a member of the session of which its
process group is a member. A newly created process joins the session
of its parent. A process can change its session membership (see
setpgid(2) or setpgrp(2)). Usually a session comprises all the
processes (including children) created as a result of a single login.
Hewlett-Packard Company - 1 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
The Controlling Terminal [Toc] [Back]
A terminal can belong to a process as its controlling terminal. Each
process of a session that has a controlling terminal has the same
controlling terminal. A terminal can be the controlling terminal for
at most one session. The controlling terminal for a session is
allocated by the session leader. If a session leader has no
controlling terminal and opens a terminal device file that is not
already associated with a session without using the O_NOCTTY option
(see open(2), the terminal becomes the controlling terminal of the
session and the controlling terminal's foreground process group is set
to the process group of the session leader. While a controlling
terminal is associated with a session, the session leader is said to
be the controlling process of the controlling terminal.
The controlling terminal is inherited by a child process during a
fork() (see fork(2)). A process relinquishes its controlling terminal
if it creates a new session with setsid() or setpgrp() (see setsid(2)
and setpgrp(2)), or when all file descriptors associated with the
controlling terminal have been closed.
When the controlling process terminates, the controlling terminal is
disassociated from the current session, allowing it to be acquired by
a new session leader. A SIGHUP signal is sent to all processes in the
foreground process group of the controlling terminal. Subsequent
access to the terminal by other processes in the earlier session can
be denied (see Terminal Access Control) with attempts to access the
terminal treated as if a modem disconnect had been sensed.
Terminal Access Control [Toc] [Back]
Read operations are allowed (see Input Processing and Reading Data)
from processes in the foreground process group of their controlling
terminal. If a process is not in the foreground process group of its
controlling terminal, the process and all member's of its process
group are considered to be in a background process group of this
controlling terminal. All attempts by a process in a background
process group to read from its controlling terminal will be denied.
If denied and the reading process is ignoring or blocking the SIGTTIN
signal, or the process (on systems that implement vfork separately
from fork) has made a call to vfork(2) but has not yet made a call to
exec(2), or the process group of the reading process is orphaned,
read() returns -1 with errno set to EIO and no signal is sent. In all
other cases where the read is denied, the process group of the reading
process will be sent a SIGTTIN signal. The default action of the
SIGTTIN signal is to stop the process to which it is sent.
If the process is in the foreground process group of its controlling
terminal, write operations are allowed (see Writing Data and Output
Processing). Attempts by a process in a background process group to
write to its controlling terminal are denied if TOSTOP (see Local
Modes) is set, the process is not ignoring and not blocking the
SIGTTOU signal, and the process (on systems that implement vfork
Hewlett-Packard Company - 2 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
separately from fork) has not made a call to vfork(2) without making a
subsequent call to exec(2). If the write is denied and the background
process group is orphaned, the write() returns -1 with errno set to
EIO. If the write is denied and the background process group is not
orphaned, the SIGTTOU signal is sent to the process group of the
writing process. The default action of the SIGTTOU signal is to stop
the process to which it is sent.
Certain calls that set terminal parameters are treated in the same
fashion as write, except that TOSTOP is ignored; that is, the effect
is identical to that of terminal writes when TOSTOP is set.
Input Processing and Reading Data [Toc] [Back]
A terminal device associated with a terminal device file can operate
in full-duplex mode, so that data can arrive, even while data output
is occurring. Each terminal device file has an input queue associated
with it into which incoming data is stored by the system before being
read by a process. The system imposes a limit, MAX_INPUT, on the
number of characters that can be stored in the input queue. This
limit is dependent on the particular implementation, but is at least
256. When the input limit is reached, all saved characters are
discarded without notice.
All input is processed either in canonical mode or non-canonical mode
(see Canonical Mode Input Processing and Non-Canonical Mode Input
Processing). Additionally, input characters are processed according
to the c_iflag (see Input Modes) and c_lflag (see Local Modes) fields.
For example, such processing can include echoing, which in general
means transmitting input characters immediately back to the terminal
when they are received from the terminal. This is useful for
terminals that operate in full-duplex mode.
The manner in which data is provided to a process reading from a
terminal device file depends on whether the terminal device file is in
canonical or non-canonical mode.
Another dependency is whether the O_NONBLOCK or O_NDELAY flag is set
by either open(2) or fcntl(2). If the O_NONBLOCK and O_NDELAY flags
are both clear, the read request is blocked until data is available or
a signal is received. If either the O_NONBLOCK or O_NDELAY flag is
set, the read request completes without blocking in one of three ways:
+ If there is enough data available to satisfy the entire
request, read() completes successfully, having read all of the
data requested, and returns the number of characters read.
+ If there is not enough data available to satisfy the entire
request, read() completes successfully, having read as much
data as possible, and returns the number of characters read.
Hewlett-Packard Company - 3 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
+ If there is no data available, read() returns -1, with errno
set to EAGAIN when the O_NONBLOCK flag is set. Otherwise,
(flag O_NONBLOCK is clear and O_NDELAY is set) read()
completes successfully, having read no data, and returns a
count of 0.
The availability of data depends upon whether the input processing
mode is canonical or non-canonical. The following sections, Canonical
Mode Input Processing and Non-Canonical Mode Input Processing,
describe each of these input processing modes.
Canonical Mode Input Processing (Erase and Kill Processing) [Toc] [Back]
In canonical mode input processing, terminal input is processed in
units of lines, where a line is delimited by a new-line (NL)
character, an end-of-file (EOF) character, or an end-of-line character
(EOL) or (EOL2). See Special Characters for more information on NL,
EOF, EOL, and EOL2. This means that a read request does not return
until an entire line has been typed or a signal has been received.
Also, no matter how many characters are requested in the read call, at
most one line will be returned. It is not, however, necessary to read
a whole line at once; any number of characters can be requested in a
read, even one, without losing information.
MAX_CANON is the limit on the number of characters in a line. This
limit varies with each particular implementation, but is at least 256.
When the MAX_CANON limit is reached, all characters in the current
undelimited line are discarded without notice.
Erase and kill processing occur when any of three special characters,
the ERASE, WERASE, or KILL characters (see Special Characters), is
received. This processing affects data in the input queue that has
not yet been delimited by a NL, EOF, EOL, or EOL2 character. This
undelimited data makes up the current line. The ERASE character
deletes the last character in the current line, if one exists. The
WERASE character deletes the last word in the current line, if one
exists. A word is defined as a series of non-blank characters (tabs
are equivalent to blanks). The KILL character deletes all data in the
current line, if any, and optionally outputs a new-line (NL)
character. These characters operate on a key-stroke basis,
independent of any backspacing or tabbing that may have preceded them.
ERASE, WERASE, and KILL characters have no effect if the current line
is empty. ERASE, WERASE, and KILL characters are not placed in the
input queue.
Non-Canonical Mode Input Processing (MIN/TIME Interaction)
In non-canonical mode input processing, input characters are not
assembled into lines, and erase and kill processing does not occur.
The values of the MIN and TIME members of the c_cc array (see termios
Structure) are used to determine how to process the characters
received. MIN represents the minimum number of characters that should
Hewlett-Packard Company - 4 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
be received before read() successfully returns. TIME is a timer of
0.10 second granularity that is used to timeout bursty and short term
data transmissions. The four possible cases for MIN and TIME and
their interactions are described below.
Case A: MIN > 0, TIME > 0
In this case, TIME serves as an inter-character timer and is activated
after the first character is received. Since it is an inter-character
timer, it is reset after each character is received. The interaction
between MIN and TIME is as follows:
+ As soon as one character is received, the inter-character
timer is started.
+ If MIN characters are received before the inter-character
timer expires (remember that the timer is reset upon receipt
of each character), the read is satisfied. If the timer
expires before MIN characters are received, the characters
received to that point are returned to the user.
+ Note that if TIME expires, at least one character will be
returned because the timer would not have been enabled unless
a character was received. In this case ( MIN > 0, TIME > 0 )
the read blocks until the MIN and TIME mechanisms are
activated by the receipt of the first character, or a signal
is received.
Case B: MIN > 0, TIME = 0
In this case, since the value of TIME is zero, the timer plays no role
and only MIN is significant. A pending read is not satisfied until
MIN characters are received after any previous read completes (that
is, the pending read blocks until MIN characters are received), or a
signal is received. A program that uses this case to handle recordbased
terminal I/O can block indefinitely in the read operation.
Case C: MIN = 0, TIME > 0
In this case, since the value of MIN is zero, TIME no longer
represents an inter-character timer. It now serves as a read timer
that is activated as soon as the read() function is processed. A read
is satisfied as soon as a single character is received or the read
timer expires. If the timer expires, no character is returned. If
the timer does not expire, the only way the read can be satisfied is
by a character being received. A read cannot block indefinitely
waiting for a character because if no character is received within
TIME x 0.10 seconds after the read is initiated, read() returns a
value of zero, having read no data.
Hewlett-Packard Company - 5 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
Case D: MIN = 0, TIME = 0
The number of characters requested or the number of characters
currently available, whichever is less, is returned without waiting
for more characters to be input. If no characters are available,
read() returns a value of zero, having read no data.
Some points to note about MIN and TIME:
1. In the above explanations, the interactions of MIN and TIME
are not symmetric. For example, when MIN > 0 and TIME = 0,
TIME has no effect. However, in the opposite case where MIN
= 0 and TIME > 0, both MIN and TIME play a role in that MIN
is satisfied with the receipt of a single character.
2. Also note that in case A ( MIN > 0, TIME > 0 ), TIME
represents an inter-character timer while in case C ( MIN =
0, TIME > 0 ), TIME represents a read timer.
These two points highlight the dual purpose of the MIN/TIME feature.
Cases A and B (where MIN > 0 ) exist to handle burst mode activity
(such as file transfer programs) where a program would like to process
at least MIN characters at a time. In case A, the inter-character
timer is activated by a user as a safety measure while in case B it is
turned off.
Cases C and D exist to handle single character timed transfers. These
cases are readily adaptable to screen-based applications that need to
know if a character is present in the input queue before refreshing
the screen. In case C the read is timed, while in case D it is not.
Another important note is that MIN is always just a minimum. It does
not denote a record length. For example, if a program initiates a
read of 20 characters when MIN is 10 and 25 characters are present, 20
characters will be returned to the user. Had the program requested
all characters, all 25 characters would be returned to the user.
Furthermore, if TIME is greater than zero and MIN is greater than
MAX_INPUT, the read will never terminate as a result of MIN characters
being received because all the saved characters are discarded without
notice when MAX_INPUT is exceeded. If TIME is zero and MIN is greater
than MAX_INPUT, the read will never terminate unless a signal is
received.
Special Characters [Toc] [Back]
Certain characters have special functions on input, output, or both.
Unless specifically denied, each special character can be changed or
disabled. To disable a character, set its value to _POSIX_VDISABLE
(see unistd(5)). These special functions and their default character
values are:
Hewlett-Packard Company - 6 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
INTR (Rubout or ASCII DEL) special character on input and
is recognized if ISIG (see Local Modes) is enabled.
Generates a SIGINT signal which is sent to all
processes in the foreground process group for which
the terminal is the controlling terminal. Normally,
each such process is forced to terminate, but
arrangements can be made to either ignore or hold
the signal, or to receive a trap to an agreed-upon
location; see signal(2) and signal(5). If ISIG is
set, the INTR character is discarded when processed.
If ISIG is clear, the INTR character is processed as
a normal data character, and no signal is sent.
QUIT (Ctrl-| or ASCII FS) special character on input.
Recognized if ISIG (see Local Modes) is set. The
treatment of this character is identical to that of
the INTR character except that a SIGQUIT signal is
generated and the processes that receive this signal
are not only terminated, but a core image file
(called core) is created in the current working
directory if the implementation supports core files.
SWTCH (ASCII NUL) special character on input and is only
used by the shell layers facility shl(1). The shell
layers facility is not part of the general terminal
interface. No special functions are performed by
the general terminal interface when SWTCH characters
are encountered.
ERASE (#) special character on input and is recognized if
ICANON (see Local Modes) is enabled. Erases the
preceding character. Does not erase beyond the
start of a line, as delimited by a NL, EOF, EOL, or
EOL2 character. If ICANON is enabled, the ERASE
character is discarded when processed. If ICANON is
not enabled, the ERASE character is treated as a
normal data character.
WERASE (disabled) special character on input and is
recognized if ICANON (see Local Modes) is enabled.
Erases the preceding word. Does not erase beyond
the start of a line, as delimited by a NL, EOF, EOL,
or EOL2 character. If ICANON is enabled, the WERASE
character is discarded when processed. If ICANON is
not enabled, the WERASE character is treated as a
normal data character.
KILL (@) special character on input and is recognized if
ICANON is enabled. KILL deletes the entire line, as
delimited by a NL, EOF, EOL, or EOL2 character. If
ICANON is enabled, the KILL character is discarded
Hewlett-Packard Company - 7 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
when processed. If ICANON is not enabled, the KILL
character is treated as a normal data character.
EOF (Control-D or ASCII EOT) special character on input
and is recognized if ICANON is enabled. EOF can 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 program without
waiting for a new-line, and the EOF is discarded.
Thus, if there are no characters waiting, (that is,
the EOF occurred at the beginning of a line) a
character count of zero is returned from read(),
representing an end-of-file indication. If ICANON
is enabled, the EOF character is discarded when
processed. If ICANON is not enabled, the EOF
character is treated as a normal data character.
NL (ASCII LF) special character on input and is
recognized if ICANON flag is enabled. It is the
line delimiter (\n). If ICANON is not enabled, the
NL character is treated as a normal data character.
EOL (ASCII NUL) special character on input and is
recognized if ICANON is enabled. EOL is an
additional line delimiter similar to NL. It is not
normally used. If ICANON is not enabled, the EOL
character is treated as a normal data character.
EOL2 (disabled) special character on input and is
recognized if ICANON is enabled. EOL2 is an
additional line delimiter similar to EOL. It is not
normally used. If ICANON is not enabled, the EOL2
character is treated as a normal data character.
SUSP (disabled) special character recognized on input.
If ISIG is enabled, receipt of the SUSP character
causes a SIGTSTP signal to be sent to all processes
in the foreground process group for which the
terminal is the controlling terminal, and the SUSP
character is discarded when processed. If ISIG is
not enabled, the SUSP character is treated as a
normal data character. Command interpreter
processes typically set SUSP to Control-Z.
DSUSP (disabled) special character recognized on input.
If ISIG is enabled, and a process in the foreground
process group attempts to read the DSUSP character,
a SIGTSTP signal is sent to all processes in the
foreground process group for which the terminal is
the controlling terminal, and the DSUSP character is
then discarded. If ISIG is not enabled, the DSUSP
Hewlett-Packard Company - 8 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
character is treated as a normal data character.
Note that DSUSP is similar to SUSP except that the
signal is sent when a process in the foreground
process group attempts to read the DSUSP character,
rather than when it is typed.
STOP (Control-S or ASCII DC3) special character on both
input and output. If IXON (output control) is
enabled, processing of the STOP character
temporarily suspends output to the terminal device.
This is useful with CRT terminals to prevent output
from disappearing before it can be read. While
output is suspended and IXON is enabled, STOP
characters are ignored and not read. If IXON is
enabled, the STOP character is discarded when
processed. If IXON is not enabled, the STOP
character is treated as a normal data character. If
IXOFF (input control) is enabled, the system sends a
STOP character to the terminal device when the
number of unread characters in the input queue is
approaching a system specified limit. This is an
attempt to prevent this buffer from overflowing by
telling the terminal device to stop sending data.
START (Control-Q or ASCII DC1) special character on both
input and output. If IXON (output control) is
enabled, processing of the START character resumes
output that has been suspended. While output is not
suspended and IXON is enabled, START characters are
ignored and not read. If IXON is enabled, the START
character is discarded when processed. If IXON is
not enabled, the START character is treated as a
normal data character. If IXOFF (input control) is
enabled, the system sends a START character to the
terminal device when the input queue has drained to
a certain system-defined level. This occurs when
the input queue is no longer in danger of possibly
overflowing.
CR (ASCII CR) special character on input is recognized
if ICANON is enabled. When ICANON and ICRNL are
enabled and IGNCR is not enabled, this character is
translated into a NL, and has the same affect as the
NL character. If ICANON and IGNCR are enabled, the
CR character is ignored. If ICANON is enabled and
both ICRNL and IGNCR are not enabled, the CR
character is treated as a normal data character.
LNEXT (disabled) special character recognized on input.
Causes the special meaning of the next character to
be ignored. This works for all special characters
Hewlett-Packard Company - 9 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
specified above. It allows characters to be input
that would otherwise be interpreted by the system
for a special function.
The special characters are assigned their default character values
when the terminal port is opened. The default values used are those
specified by the System V Interface Definition, Third Edition (SVID3),
except for the WERASE (Ctrl-W) and LNEXT (Ctrl-V) characters which are
set to _POSIX_VDISABLE to maintain binary compatibility with previous
releases of HP-UX. The default character values assigned when the
port is opened can be changed for all ports on a system wide basis
through the use of the stty command (see stty(1)). The character
values may also be changed for a specific port after it is opened
using the stty command. The NL and CR characters cannot be changed or
disabled. The character values for the remaining special characters
can be changed or disabled to suit individual tastes.
If ICANON is set (see Local Modes), the ERASE, KILL, and EOF
characters can be escaped by a preceding \ character, in which case no
special function is performed. These characters, and the remaining
special characters, may also be escaped by preceding them with the
LNEXT character (see LNEXT above).
If two or more special characters have the same value, the function
performed when the character is processed is undefined.
Modem Disconnect [Toc] [Back]
If a modem disconnect is detected by the terminal interface for a
controlling terminal, and if CLOCAL is clear in the c_cflag field for
the terminal (see Control Modes), the SIGHUP signal is sent to the
controlling process of the controlling terminal. Unless other
arrangements have been made, this causes the controlling process to
terminate. Any subsequent read from the terminal device returns with
an end-of-file indication until the device is closed. Thus, processes
that read a terminal file and test for end-of-file can terminate
appropriately after a disconnect. Any subsequent write() to the
terminal device returns -1, with errno set to EIO, until the device is
closed.
Closing a Terminal Device File [Toc] [Back]
The last process to close a terminal device file causes any output not
already sent to the device to be sent to the device even if output was
suspended. This last close always blocks (even if non-blocking I/O
has been specified) until all output has been sent to the terminal
device. Any input that has been received but not read is discarded.
Writing Data and Output Processing [Toc] [Back]
When characters are written, they are placed on the output queue.
Characters on the output queue are transmitted to the terminal as soon
as previously-written characters are sent. These characters are
processed according to the c_oflag field (see Output Modes). Input
Hewlett-Packard Company - 10 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
characters are echoed by putting them in the output queue as they
arrive. If a process produces characters for output more rapidly than
they can be sent, the process is suspended when its output queue
exceeds some limit. When the queue has drained down to some
threshold, the process is resumed.
termios Structure
Routines that need to control certain terminal I/O characteristics can
do so by using the termios structure as defined in the header file
<termios.h>. The structure is defined as follows:
#define NCCS 16
struct termios {
tcflag_t c_iflag; /* input modes */
tcflag_t c_oflag; /* output modes */
tcflag_t c_cflag; /* control modes */
tcflag_t c_lflag; /* local modes */
tcflag_t c_reserved; /* reserved for future use */
cc_t c_cc[NCCS]; /* control chars */
};
The special characters are defined by the array c_cc. The relative
positions and default values for each special character function are
as follows:
INTR VINTR DEL
QUIT VQUIT Control-|
ERASE VERASE #
KILL VKILL @
EOF VEOF Control-D
EOL VEOL NUL
EOL2 VEOL2 disabled
MIN VMIN NUL
TIME VTIME Control-D
SUSP VSUSP disabled
START VSTART Control-Q
STOP VSTOP Control-S
WERASE VWERASE disabled
LNEXT VLNEXT disabled
DSUSP VDSUSP disabled
termio Structure
The termio structure has been superseded by the termios structure and
is provided for backward compatibility with prior applications (see
termio Caveats). The structure is defined in the header file
<termio.h> and is defined as follows:
#define NCC 8
struct termio {
unsigned short c_iflag; /* input modes */
Hewlett-Packard Company - 11 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
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]; /* control chars */
};
Modes [Toc] [Back]
The next four sections describe the specific terminal characteristics
that can be set using the termios and termio structures (see termio
Caveats). Any bits in the modes fields that are not explicitly
defined below are ignored. However, they should always be clear to
prevent future compatibility problems.
Input Modes [Toc] [Back]
The c_iflag field describes the basic terminal input control:
IGNBRK Ignore break condition.
BRKINT Signal interrupt on break.
IGNPAR Ignore characters with parity errors.
PARMRK Mark parity errors.
INPCK Enable input parity check.
ISTRIP Strip character.
INLCR Map NL to CR on input.
IGNCR Ignore CR.
ICRNL Map CR to NL on input.
IUCLC Map uppercase to lowercase on input.
IXON Enable start/stop output control.
IXANY Enable any character to restart output.
IXOFF Enable start/stop input control.
IMAXBEL Enable BEL on input line too long.
A break condition is defined as a sequence of zero-value bits that
continues for more than the time to send one character. For example, a
character framing or parity error with data all zeros is interpreted
as a single break condition.
If IGNBRK is set, the break condition is ignored. Therefore the break
condition cannot be read by any process. If IGNBRK is clear and
BRKINT is set, the break condition flushes both the input and output
queues and, if the terminal is the controlling terminal of a
foreground process group, the break condition generates a single
SIGINT signal to that foreground process group. If neither IGNBRK nor
BRKINT is set, a break condition is read as a single \0 character, or
if PARMRK is set, as the three-character sequence \377, \0, \0.
If IGNPAR is set, characters with other framing and parity errors
(other than break) are ignored.
If PARMRK is set, and IGNPAR is clear, a character with a framing or
parity error (other than break) is read as the three-character
Hewlett-Packard Company - 12 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
sequence: \377, \0, X, where X is the data of the character received
in error. To avoid ambiguity in this case, if ISTRIP is clear, a
valid character of \377 is read as \377, \377. If both PARMRK and
IGNPAR are clear, a framing or parity error (other than break) is read
as the character \0.
If INPCK is set, input parity checking is enabled. If INPCK is clear,
input parity checking is disabled. Whether input parity checking is
enabled or disabled is independent of whether parity detection is
enabled or disabled (see Control Modes). If PARENB is set (see
Control Modes) and INPCK is clear, parity generation is enabled but
input parity checking is disabled; the hardware to which the terminal
is connected will recognize the parity bit, but the terminal special
file will not check whether this bit is set correctly or not.
The following table shows the interrelationship between the flags
IGNBRK, BRKINT, IGNPAR, and PARMRK. The column marked Input gives
various types of input characters received, indicated as follows:
0 NUL character (\0)
C Character other than NUL
P Parity error detected
F Framing error detected
Items enclosed in brackets indicate one or more of the conditions are
true.
If the INPCK flag is clear, characters received with parity errors are
not processed according to this table, but instead, as if no parity
error had occurred. Under the flag columns, Set indicates the flag is
set, Clear indicates the flag is not set, and X indicates the flag may
be set or clear. The column labeled Read shows the results that will
be passed to the application code. A - indicates that no character or
condition is passed to the application code. The value SIGINT
indicates that no character is returned, but that the SIGINT signal is
sent to the foreground process group of the controlling terminal.
Input 1IGNBRK BRKINT IGNPAR PARMRK Read
______________________________________________________________
0[PF] Set X X X -
0[PF] Clear Set X X SIGINT
0[PF] Clear Clear X Set '\377','\0','\0'
0[PF] Clear Clear X Clear '\0'
C[PF] X X Set X -
C[PF] X X Clear Set '\377','\0',C
C[PF] X X Clear Clear '\0'
'\377' X X X Set '\377','\377'
If ISTRIP is set, valid input characters are first stripped to 7-bits,
otherwise all 8-bits are processed.
Hewlett-Packard Company - 13 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
If INLCR is set, a received NL character is translated into a CR
character. If IGNCR is set, a received CR character is ignored (not
read). If IGNCR is clear and ICRNL is set, a received CR character is
translated into a NL character.
If IUCLC is set, a received uppercase alphabetic character is
translated into the corresponding lowercase character.
If IXON is set, start/stop output control is enabled. A received STOP
character suspends output and a received START character restarts
output. If IXANY and IXON are set, any input character without a
framing or parity error restarts output that has been suspended. When
these three flags are set, output suspended, and an input character
received with a framing or parity error, output resumes if processing
it results in data being read. When IXON is set, START and STOP
characters are not read, but merely perform flow control functions.
When IXON is clear, the START and STOP characters are read.
If IXOFF is set, start/stop input control is enabled. The system
transmits a STOP character when the number of characters in the input
queue exceeds a system defined value (high water mark). This is
intended to cause the terminal device to stop transmitting data in
order to prevent the number of characters in the input queue from
exceeding MAX_INPUT. When enough characters have been read from the
input queue that the number of characters remaining is less than
another system defined value (low water mark), the system transmits a
START character which is intended to cause the terminal device to
resume transmitting data (without risk of overflowing the input
queue). In order to avoid potential deadlock, IXOFF is ignored in
canonical mode whenever there is no line delimiter in the input
buffer. In this case, the STOP character is not sent at the high
water mark, but will be transmitted later if a delimiter is received.
If all complete lines are read from the input queue leaving only a
partial line with no line delimiter, the START character is sent, even
if the number of characters is still greater than the low water mark.
When ICANON is set and the input stream contains more characters
between line delimiters than the high water mark allows, there is no
guarantee that IXOFF can prevent buffer overflow and data loss,
because the STOP character may not be sent in time, if at all.
If IMAXBEL is set, the ASCII BEL character is echoed if the input
queue overflows. Further input is not stored, but any input present
in the input queue is not discarded. If IMAXBEL is clear, no ASCII
BEL character is echoed, and the input already present in the input
queue is discarded when the input queue overflows.
The initial input control value is all bits clear.
Output Modes [Toc] [Back]
The c_oflag field specifies the system treatment of output:
Hewlett-Packard Company - 14 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
OPOST Postprocess output.
OLCUC Map lowercase to uppercase on output.
ONLCR Map NL to CR-NL on output.
OCRNL Map CR to NL on output.
ONOCR No CR output at column 0.
ONLRET NL performs CR function.
OFILL Use fill characters for delay.
OFDEL Fill is DEL, else NUL.
NLDLY Select new-line delays:
NL0 No delay
NL1 Delay type 1
CRDLY Select carriage-return delays:
CR0 No delay
CR1 Delay type 1
CR2 Delay type 2
CR3 Delay type 3
TABDLY Select horizontal-tab delays:
TAB0 No delay
TAB1 Delay type 1
TAB2 Delay type 2
TAB3 Expand tabs to spaces.
XTABS Expand tabs to spaces.
BSDLY Select backspace delays:
BS0 No delay
BS1 Delay type 1
VTDLY Select vertical-tab delays:
VT0 No delay
VT1 Delay type 1
FFDLY Select form-feed delays:
FF0 No delay
FF1 Delay type 1
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 alphabetic character is transmitted as
the corresponding uppercase character. This function is often used in
conjunction with IUCLC.
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 set, the NL character
is assumed to do the carriage-return function; the column pointer will
be set to 0, and the delays specified for CR will be used. If ONLRET
is clear, the NL character is assumed to perform only the line-feed
function; the delays specified for NL are used and the column pointer
remains unchanged. For all of these cases, the column pointer is
always set to 0 if the CR character is actually transmitted.
Hewlett-Packard Company - 15 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
The delay bits specify how long transmission stops to allow for
mechanical or other movement when certain characters are sent to the
terminal. The values of NL0, CR0, TAB0, BS0, VT0, and FF0 indicate no
delay. If OFILL is set, fill characters are transmitted for delay
instead of a timed delay. This is useful for high baud rate
terminals, that need only a minimal delay. If OFDEL is set, the fill
character is DEL; otherwise NUL.
If a form-feed or vertical-tab delay is specified, it lasts for about
2 seconds.
New-line delay lasts about 0.10 seconds. If ONLRET is set, carriagereturn
delays are used instead of the new-line delays. If OFILL is
set, two fill characters are transmitted.
Carriage-return delay type 1 depends on the current column position;
type 2 is about 0.10 seconds; type 3 about 0.15 seconds. If OFILL is
set, delay type 1 transmits two fill characters; type 2, four fill
characters.
Horizontal-tab delay type 1 is 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 are
transmitted for any delay.
Backspace delay lasts about 0.05 seconds. If OFILL is set, one fill
character is transmitted.
The actual delays depend on line speed and system load.
The initial output control value is all bits clear.
Control Modes [Toc] [Back]
The c_cflag field describes the hardware control of the terminal:
CBAUD Baud rate: CSIZE Character size:
B0 Hang up CS5 5 bits
B50 50 baud CS6 6 bits
B75 75 baud CS7 7 bits
B110 110 baud CS8 8 bits
B134 134.5 baud
B150 150 baud CSTOPB Send two stop bits, else one.
B200 200 baud CREAD Enable receiver.
B300 300 baud PARENB Parity enable.
B600 600 baud PARODD Odd parity, else even.
B900 900 baud HUPCL Hang up on last close.
B1200 1200 baud CLOCAL Local line, else dial-up.
B1800 1800 baud LOBLK Reserved for use by shl(1).
B2400 2400 baud
B3600 3600 baud
B4800 4800 baud
Hewlett-Packard Company - 16 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
B7200 7200 baud
B9600 9600 baud
B19200 19200 baud
B38400 38400 baud
EXTA External A
EXTB External B
The CBAUD bits specify the baud rate. The zero baud rate, B0, is used
to hang up the connection. If B0 is specified, the modem control
lines (see modem(7)) cease to be asserted. Normally, this disconnects
the line. For any particular hardware, impossible speed changes are
ignored. CBAUD is provided for use with the termio structure. When
the termios structure is used, several routines are available for
setting and getting the input and output baud rates (see termios
Structure Related Functions).
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. For example, at 110 baud, many devices require two stop
bits.
If PARENB is set, parity generation is enabled (a parity bit is added
to each output character). Furthermore, parity detection is enabled
(incoming characters are checked for the correct parity). If PARENB
is set, PARODD specifies odd parity if set; otherwise even parity is
used. If PARENB is clear, both parity generation and parity checking
are disabled.
If CREAD is set, the receiver is enabled. Otherwise no characters can
be received.
The specific effects of the HUPCL and CLOCAL bits depend on the mode
and type of the modem control in effect. See modem(7) for the
details.
If HUPCL is set, the modem control lines for the port are lowered
(disconnected) when the last process using the open port closes it or
terminates.
If CLOCAL is set, a connection does not depend on the state of the
modem status lines. If CLOCAL is clear, the modem status lines are
monitored.
Under normal circumstances, a call to read() waits for a modem
connection to complete. However, if either the O_NDELAY or the
O_NONBLOCK flags are set or CLOCAL is set, the open() returns
immediately without waiting for the connection. If CLOCAL is set, see
Modem Disconnect for the effects of read() and write() for those files
for which the connection has not been established or has been lost.
Hewlett-Packard Company - 17 - HP-UX 11i Version 2: August 2003
termio(7) termio(7)
LOBLK is used by the shell layers facility (see shl(1)). The shell
layers facility is not part of the general terminal interface, and the
LOBLK bit is not examined by the general terminal interface.
The initial hardware control value after open is B300, CS8, CREAD, and
HUPCL.
Local Modes [Toc] [Back]
The c_lflag field is used to control terminal functions.
ISIG Enable signals.
ICANON Canonical input (erase and kill processing).
XCASE Canonical upper/lower presentation.
ECHO Enable echo.
ECHOE Echo ERASE as correcting backspace sequence.
ECHOK Echo NL after kill character.
ECHONL Echo NL.
NOFLSH Disable flush after interrupt, quit, or suspend.
TOSTOP Send SIGTTOU for background output.
ECHOCTL Echo control characters as ^char, DEL as ^?.
ECHOPRT Echo erased character as character is erased.
ECHOKE BS SP BS erase entire line on line kill.
FLUSHO Output is being flushed.
PENDIN Reprocess pending input at next read or input
character.
IEXTEN Enable extended functions.
If ISIG is set, each input character is checked against the special
control characters INTR, QUIT, SUSP, and DSUSP (see Process Group
Control IOCTL Commands). If an input character matches one of these
control characters, the function associated with that character is
performed and the character is discarded. If ISIG is clear, no
checking is done and the character is treated as a normal data
character. Thus these special input functions are possible only if
ISIG is set.
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, EOL, or EOL2. If ICANON is clear,
read requests are satisfied directly from the input queue. A read
blocks until at least MIN characters have been received or the timeout
value TIME has expired between characters. (See Non-Canonical Mode
Input Processing (MIN/TIME Interaction)). Thi
|