Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

stty(1)

fork(2)

ioctl(2)

setpgrp(2)

signal(2)



          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



          NAME
               termio - general terminal interface

          DESCRIPTION
               All of the asynchronous communications ports use the same
               general interface, no matter what hardware is involved.  The
               remainder of this section discusses the common features of
               this interface.

               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 terminal 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 special
               role in handling quit and interrupt signals, as discussed
               below.  The control terminal is inherited by a child process
               during a fork(2).  A process can break this association 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 allowed 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, the buffer is
               flushed and all the saved characters are thrown away without
               notice.

               Normally, terminal input is processed in units of lines.  A
               line is delimited by a new-line (ASCII LF) character, an
               end-of-file (ASCII EOT) character, or an end-of-line charac-
               ter.  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,
               at most one line will be returned.  It is not, however,
               necessary to read a whole line at once; any number of char-
               acters may be requested in a read, even one, without losing
               information.

               During input, erase and kill processing is normally done.
               By default, the character # erases the last character typed,
               except that it will not erase beyond the beginning of the
               line.  By default, the character @ kills (deletes) the
               entire input line, and optionally outputs a new-line charac-
               ter.  Both these characters operate on a key-stroke 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


          Rev.                                                       Page 1





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               character (\).  In this case, the escape character is not
               read.  The erase and kill characters may be changed.





















































          Rev.                                                       Page 2





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               Certain characters have special functions on input.  These
               functions and their default character values are summarized
               as follows:

               INTR    ( RUBOUT or ASCII DEL) generates an interrupt signal
                       which is sent to all processes with the associated
                       control terminal.  Normally, each such process is
                       forced to terminate, but arrangements may be made
                       either to ignore the signal or to receive a trap to
                       an agreed-upon location; 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.

               SWTCH   (CTRL-Z or ASCII SUB) is used by the job control
                       facility, 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 EOL character.

               KILL    (@) deletes the entire line, as delimited by a NL,
                       EOF, or EOL 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 program, without waiting for a new-line, and
                       the EOF is discarded.  Thus, if there are no charac-
                       ters waiting, which is to say the EOF occurred at
                       the beginning of a line, zero characters will be
                       passed back, which is the standard end-of-file indi-
                       cation.

               NL      (ASCII LF) is the normal line delimiter.  It cannot
                       be changed or escaped.

               EOL     (ASCII NUL) is an additional line delimiter, like
                       NL.  It is not normally used.

               EOL2    is another additional line delimiter.

               STOP    (CTRL-S or ASCII DC3) can be used to temporarily
                       suspend output.  It is useful with CRT terminals to
                       prevent output from disappearing before it can be
                       read.  While output is suspended, STOP characters
                       are ignored and not read.



          Rev.                                                       Page 3





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               START   (CTRL-Q or ASCII DC1) is used to resume output which
                       has been suspended by a STOP character.  While out-
                       put is not suspended, START characters are ignored
                       and not read.  The start/stop characters can not be
                       changed or escaped.

               The character values for INTR, QUIT, SWTCH, ERASE, KILL,
               EOF, and EOL may be changed to suit individual tastes.  The
               ERASE, KILL, and EOF characters may be escaped by a preced-
               ing \ character, in which case no special function is done.

               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) system calls apply to terminal files.  The
               primary calls 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];/* control chars */
                    };

               The XENIX extension ioctl calls use the following structures
               that are defined in <ttold.h>:

                    struct       sgttyb {
                          char        sg_ispeed;
                          char        sg_ospeed;
                          char        sg_erase;
                          char        sg_kill;
                          short       sg_flags;
                    };


          Rev.                                                       Page 4





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



                    struct       tc {
                          char        t_intrc;
                          char        t_quitc;
                          char        t_startc;
                          char        t_stopc;
                          char        t_eofc;
                          char        t_brkc;
                    };

               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    @
                    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).


          Rev.                                                       Page 5





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               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 7-bits, otherwise all 8-bits are processed.

               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).  Otherwise if 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 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 which 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 treatment of output:

                    OPOST   0000001  Postprocess output.
                    OLCUC   0000002  Map lower case 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 new-line 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:


          Rev.                                                       Page 6





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



                    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 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.  Otherwise,
               the NL character is assumed to do just the line-feed func-
               tion; the column pointer will remain unchanged.  The column
               pointer is also set to 0 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 0 indicates
               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 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,
               the carriage-return delays are used instead of the new-line
               delays.  If OFILL is set, two fill characters will be
               transmitted.

               Carriage-return delay type 1 is dependent 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 is dependent 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.


          Rev.                                                       Page 7





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               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
                    B75     0000002  75 baud
                    B110    0000003  110 baud
                    B134    0000004  134 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
                    B19200  0000016 19200 baud
                    EXTA    0000016  External A
                    B38400  0000017  38400 baud
                    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 dial-up.
                    RCV1EN  0010000
                    XMT1EN  0020000
                    LOBLK   0040000  Block layer output.

               The CBAUD bits specify the baud rate.  The zero baud rate,
               B0, is used to hang up the connection.  If B0 is specified,
               the data-terminal-ready signal will not be asserted.  Nor-
               mally, 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


          Rev.                                                       Page 8





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               used, otherwise one stop bit.  For example, at 110 baud, two
               stops 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.

               If CLOCAL is set, the line is assumed to be a local, direct
               connection with no modem control.  Otherwise, modem control
               is assumed.

               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:

               ISIG     0000001 Enable signals.
               ICANON   0000002 Canonical input (erase and kill processing).
               XCASE    0000004 Canonical upper/lower 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
               (e.g., 0377).

               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


          Rev.                                                       Page 9





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               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:
                    `    \'
                    |    \!
                    ~    \^
                    {    \(
                    }    \)
                    \    \\

               For example, A is input as \a, \n as \\n, and \N as \\\n.

               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 is echoed as ASCII SP BS.  If ECHOK is
               set, the NL character will be echoed after the kill charac-
               ter 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 the 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 following form:
                    ioctl(fildes, command, arg);

               where fildes is the file descriptor of the opened tty


          Rev.                                                      Page 10





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



               device, command is the ioctl type, and arg is a buffer or
               structure depending on the ioctl call used.

               For the following calls using this form, the arg is of type:
                    struc termio *arg;

                    TCGETA
                         Gets the parameters associated with the terminal
                         and store them in the termio structure referenced
                         by arg.

                    TCSETA
                         Sets the parameters associated with the terminal
                         from the structure referenced by arg. The change
                         is immediate.

                    TCSETAW
                         Waits for the output to drain before setting the
                         new parameters. This form should be used when
                         changing parameters that will affect output.

                    TCSETAF
                         Waits for the output to drain, then flush the
                         input queue and set the new parameters.

               For the following calls using this form, the arg parameter
               must be a pointer to a buffer of size 1024:

                    LDSMAP
                         Sets the input/output mapping on a channel.

                    LDGMAP
                         Gets the input/output mapping on a channel.

                    LDNMAP
                         Turns off the input/output mapping on a channel.
                         The arg for this call must be a NUL pointer.

               For the following ioctl calls, the arg parameter is of type:
                    struc tc *arg;

                    TIOCGETC
                         Gets the current settings of special characters.

                    TIOCSETC
                         Changes the settings for special characters.

               The TIOCSETN ioctl call requires a different arg type. The
               arg for this call must be of type:
                    struc sgttyb *arg;

                    TIOCSETN
                         Sets the parameters associated with the terminal,


          Rev.                                                      Page 11





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



                         but does not delay or flush the input.

               For the following ioctl calls, the arg is of type NUL:

                    TIOCEXCL
                         Sets exclusive use mode: no futher opens are per-
                         mitted until the file has been closed.

                    TIONEXCL
                         Resets exclusive use mode: further opens are once
                         again permitted.

                    TIOCHPCL
                         When the file is closed for the last time, hang up
                         the terminal.

                    TIOCFLUSH
                         All characters waiting in the input or output
                         queues are flushed.

                    FIORDCHK
                         Return a non-zero value if there are characters on
                         the input.

               Additional ioctl(2) calls have the form:

                    ioctl (fildes, command, arg)

               where arg is of type int or a pointer to an unsigned short,
               depending on the ioctl call used.

               For the following ioctl calls using this form, the arg is of
               type int:

                    TCSBRK    Wait for the output to drain.  If arg is 0,
                              then send a break (zero bits for 0.25
                              seconds).

                    TCXONC    Start/stop control.  If arg is 0, suspend
                              output; if 1, restart suspended output.

                    TCFLSH    If arg is 0, flush the input queue; if 1,
                              flush the output queue; if 2, flush both the
                              input and output queues.

               For the following ioctl calls using this form, the arg is of
               type:
                    unsigned short *arg;

                    TIOCGETD
                         Gets the line discipline associated with the ter-
                         minal.



          Rev.                                                      Page 12





          TERMIO(7)            INTERACTIVE UNIX System            TERMIO(7)



                    TIOCSETD
                         Sets the line discipline associated with the ter-
                         minal.

               The DIOCSETP and DIOCGETP ioctl calls are no-op calls which
               have been retained for backwards compatibility.

          FILES
               /dev/tty*

          SEE ALSO
               stty(1).
               fork(2), ioctl(2), setpgrp(2), signal(2) in the INTERACTIVE
               SDS Guide and Programmer's Reference Manual.









































          Rev.                                                      Page 13



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026