Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ termio(7) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fork(2)

ioctl(2)

setsid(2)

signal(2)

termios(2)

streamio(7)



termio(7)              DEVICES AND MODULES              termio(7)



NAME
     termio - general terminal interface

SYNOPSIS
     #include <termio.h>

     ioctl(int fildes, int request, struct termio *arg);
     ioctl(int fildes, int request, int arg);

     #include <termios.h>

     ioctl(int fildes, int request, struct termios *arg);

DESCRIPTION
     System V supports a general interface for asynchronous  com-
     munications  ports  that  is hardware-independent.  The user
     interface to this functionality is via function  calls  (the
     preferred  interface)  described in termios(2) or ioctl com-
     mands  described  in  this  section.   This   section   also
     discusses  the  common  features  of  the terminal subsystem
     which are relevant with both user interfaces.

     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  the  system  and become a user's standard input,
     output, and error  files.   The  very  first  terminal  file
     opened  by  the session leader, which is not already associ-
     ated with a session, becomes the  controlling  terminal  for
     that session.  The controlling terminal plays a special role
     in handling quit and interrupt signals, as discussed  below.
     The  controlling  terminal  is  inherited by a child process
     during a fork(2).  A process can break this  association  by
     changing its session using setsid(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  character input buffers of the system become com-
     pletely full, which is rare (e.g., if the number of  charac-
     ters  in  the line discipline buffer exceeds {MAXCANON} and
     IMAXBEL [see below] is not set), or when the user has  accu-
     mulated {MAXINPUT} number of input characters that have not
     yet been read by some program.   When  the  input  limit  is
     reached,  all  the characters saved in the buffer up to that
     point are thrown away without notice.

  Session management (Job Control)
     A control terminal  will  distinguish  one  of  the  process
     groups  in  the  session  associated with it to be the fore-
     ground process group.  All other process groups in the  ses-
     sion  are  designated  as  background  process groups.  This



                                                                1





termio(7)              DEVICES AND MODULES              termio(7)



     foreground process group plays a special  role  in  handling
     signal-generating  input characters, as discussed below.  By
     default, when a controlling terminal is allocated, the  con-
     trolling  process's  process group is assigned as foreground
     process group.  Background process groups in the controlling
     process's  session are subject to a job control line discip-
     line when they attempt to access their controlling terminal.
     Process  groups  can be sent signals that will cause them to
     stop, unless they have made other arrangements.   An  excep-
     tion  is  made for members of orphaned process groups. These
     are process groups which do not have a member with a  parent
     in  another  process  group  that is in the same session and
     therefore shares the  same  controlling  terminal.   When  a
     member's  orphaned process group attempts to access its con-
     trolling terminal, errors will be returned.  since there  is
     no process to continue it if it should stop.  If a member of
     a background process group attempts to read its  controlling
     terminal,  its  process group will be sent a SIGTTIN signal,
     which will normally cause the members of that process  group
     to  stop.   If,  however, the process is ignoring or holding
     SIGTTIN, or is a member of an orphaned  process  group,  the
     read  will fail with errno set to EIO, and no signal will be
     sent.

     If a member of a background process group attempts to  write
     its  controlling  terminal  and the TOSTOP bit is set in the
     clflag field, its process group will be sent a SIGTTOU sig-
     nal,  which  will normally cause the members of that process
     group to stop.  If, however,  the  process  is  ignoring  or
     holding  SIGTTOU, the write will succeed.  If the process is
     not ignoring or holding  SIGTTOU  and  is  a  member  of  an
     orphaned  process  group, the write will fail with errno set
     to EIO, and no signal will be sent.

     If TOSTOP is set and a member of a background process  group
     attempts  to  ioctl its controlling terminal, and that ioctl
     will modify  terminal  parameters  (e.g.,  TCSETA,  TCSETAW,
     TCSETAF,  or  TIOCSPGRP),  its  process group will be sent a
     SIGTTOU signal, which will normally  cause  the  members  of
     that  process  group  to  stop.  If, however, the process is
     ignoring or holding SIGTTOU, the ioctl will succeed.  If the
     process  is  not ignoring or holding SIGTTOU and is a member
     of an orphaned process group, the write will fail with errno
     set to EIO, and no signal will be sent.

  Canonical mode input processing
     Normally, terminal input is processed in units of lines.   A
     line  is  delimited  by  a  newline (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,



                                                                2





termio(7)              DEVICES AND MODULES              termio(7)



     at most one line will be returned.   It  is  not  necessary,
     however, to read a whole line at once; any number of charac-
     ters may be requested in a read, even  one,  without  losing
     information.

     During input, erase and kill processing  is  normally  done.
     The  ERASE  character  (by  default, the character number #)
     erases the last character typed.  The WERASE character  (the
     character  control-W)  erases the last ``word'' typed in the
     current input line (but not any preceding spaces  or  tabs).
     A ``word'' is defined as a sequence of non-blank characters,
     with tabs counted as blanks.  Neither ERASE nor WERASE  will
     erase  beyond  the beginning of the line. The KILL character
     (by default, the character @)  kills  (deletes)  the  entire
     input line, and optionally outputs a newline character.  All
     these characters operate on a key stroke basis,  independent
     of  any backspacing or tabbing that may have been done.  The
     REPRINT character (the character control-R) prints a newline
     followed   by  all  characters  that  have  not  been  read.
     Reprinting also  occurs  automatically  if  characters  that
     would  normally be erased from the screen are fouled by pro-
     gram output.  The characters are reprinted as if  they  were
     being  echoed;  consequencely,  if ECHO is not set, they are
     not printed.

     The ERASE and KILL characters may be  entered  literally  by
     preceding them with the escape character (\).  In this case,
     the escape character is not read.  The erase and kill  char-
     acters may be changed.

  Non-canonical mode input processing
     In non-canonical mode input processing, input characters are
     not assembled into lines, and erase and kill processing does
     not occur.  The MIN and TIME values are  used  to  determine
     how to process the characters received.

     MIN represents the minimum number of characters that  should
     be received when the read is satisfied (i.e., when the char-
     acters are returned to the user).  TIME is a timer of  0.10-
     second  granularity  that  is  used  to  timeout  bursty and
     short-term data transmissions.  The four possible values for
     MIN and TIME and their interactions are described below.

     Case A: MIN > 0, TIME > 0
       In this case, TIME serves as an intercharacter  timer  and
       is  activated after the first character is received. Since
       it is an intercharacter timer, it is reset after a charac-
       ter  is received.  The interaction between MIN and TIME is
       as follows:  as soon as one  character  is  received,  the
       intercharacter  timer  is  started.  If MIN characters are
       received before the  intercharacter  timer  expires  (note
       that  the  timer is reset upon receipt of each character),



                                                                3





termio(7)              DEVICES AND MODULES              termio(7)



       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
       sleeps until the MIN and TIME mechanisms are activated  by
       the  receipt  of  the  first  character.  If the number of
       characters read is less  than  the  number  of  characters
       available, the timer is not reactivated and the subsequent
       read is satisfied immediately.

     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  (the
       pending read sleeps until MIN characters are received).  A
       program that uses this case to read record based  terminal
       I/O may block indefinitely in the read operation.

     Case C: MIN = 0, TIME > 0
       In this case, since MIN = 0, TIME no longer represents  an
       intercharacter  timer:  it now serves as a read timer that
       is activated as soon as a read is done.  A read is  satis-
       fied as soon as a single character is received or the read
       timer expires.  Note that, in  this  case,  if  the  timer
       expires,  no character is returned.  If the timer does not
       expire, the only way the read can be  satisfied  is  if  a
       character  is  received.   In this case, the read will not
       block indefinitely waiting for a character; if no  charac-
       ter  is received within TIME*.10 seconds after the read is
       initiated, the read returns with zero characters.

     Case D: MIN = 0, TIME = 0
       In this case, return is immediate.  The minimum of  either
       the  number of characters requested or the number of char-
       acters currently available is returned without waiting for
       more characters to be input.

  Comparison of the different cases of MIN, TIME interaction
     Some points to note about MIN and TIME:

     1.  In the following explanations, note  that  the  interac-
         tions  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  intercharacter  timer, whereas in case C
         (TIME = 0, TIME > 0),  TIME  represents  a  read  timer.



                                                                4





termio(7)              DEVICES AND MODULES              termio(7)



         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 (e.g., file transfer pro-
         grams), where a program would like to process  at  least
         MIN characters at a time.  In case A, the intercharacter
         timer is activated by a user as  a  safety  measure;  in
         case B, the timer 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, whereas 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 pro-
     gram does a read of 20 bytes, MIN is 10, and  25  characters
     are  present,  then  20  characters  will be returned to the
     user.

  Writing characters
     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  as  they
     are  typed  if  echoing has been enabled.  If a process pro-
     duces characters more rapidly than they  can  be  typed,  it
     will  be suspended when its output queue exceeds some limit.
     When the queue is drained down to some threshold,  the  pro-
     gram is resumed.

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

     INTR      (Rubout or ASCII DEL) generates a  SIGINT  signal.
               SIGINT  is  sent to all frequent processes associ-
               ated with  the  controlling  terminal.   Normally,
               each  such  process  is  forced  to terminate, but
               arrangements may be made either to ignore the sig-
               nal  or  to receive a trap to an agreed upon loca-
               tion.  [See signal(5)].

     QUIT      (CTRL-| or ASCII FS) generates a  SIGQUIT  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.

     ERASE     (#) erases the preceding character.  It  does  not
               erase  beyond the start of a line, as delimited by



                                                                5





termio(7)              DEVICES AND MODULES              termio(7)



               a NL, EOF, EOL, or EOL2 character.

     WERASE    (CTRL-W  or  ASCII  ETX)  erases   the   preceding
               ``word''.  It does not erase beyond the start of a
               line, as delimited by a  NL,  EOF,  EOL,  or  EOL2
               character.

     KILL      (@) deletes the entire line, as delimited by a NL,
               EOF, EOL, or EOL2 character.

     REPRINT   (CTRL-R or ASCII  DC2)  reprints  all  characters,
               preceded by a newline, that have not been read.

     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 no  char-
               acters  are waiting (i.e., the EOF occurred at the
               beginning of a line) zero  characters  are  passed
               back,  which  is  the standard end-of-file indica-
               tion.  Unless escaped, the EOF  character  is  not
               echoed.  Because EOT is the default EOF character,
               this prevents terminals that respond to  EOT  from
               hanging up.

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

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

     EOL2      is another additional line delimiter.

     SWTCH     (CTRL-Z or ASCII EM) is used only when shl  layers
               is invoked.

     SUSP      (CTRL-Z or ASCII SUB) generates a SIGTSTP  signal.
               SIGTSTP stops all processes in the foreground pro-
               cess group for that terminal.

     DSUSP     (CTRL-Y or ASCII EM) It generates a SIGTSTP signal
               as  SUSP  does, but the signal is sent when a pro-
               cess in the foreground process group  attempts  to
               read  the  DSUSP character, rather than when it is
               typed.

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



                                                                6





termio(7)              DEVICES AND MODULES              termio(7)



     START     (CTRL-Q or ASCII DC1) is used  to  resume  output.
               Output  has  been  suspended  by a STOP character.
               While output is not  suspended,  START  characters
               are ignored and not read.

     DISCARD   (CTRL-O or ASCII SI) causes subsequent  output  to
               be  discarded.   Output is discarded until another
               DISCARD character is typed, more input arrives, or
               the condition is cleared by a program.

     LNEXT     (CTRL-V or ASCII SYN) causes the  special  meaning
               of  the  next  character to be ignored. This works
               for all the special  characters  mentioned  above.
               It allows characters to be input that would other-
               wise be interpreted  by  the  system  (e.g.  KILL,
               QUIT).

     The character values for INTR, QUIT,  ERASE,  WERASE,  KILL,
     REPRINT,  EOF,  EOL,  EOL2, SWTCH, SUSP, DSUSP, STOP, START,
     DISCARD, and LNEXT may be changed to suit individual tastes.
     If   the   value   of   a   special   control  character  is
     _POSIX_VDISABLE (0), the function of  that  special  control
     character  is  disabled. The ERASE, KILL, and EOF characters
     may be escaped by a preceding \ character, in which case  no
     special function is done.  Any of the special characters may
     be preceded by the LNEXT character, in which case no special
     function is done.

  Modem disconnect
     When a modem disconnect is detected, a SIGHUP signal is sent
     to the terminal's controlling process. Unless other arrange-
     ments have been made, these signals  cause  the  process  to
     terminate.   If  SIGHUP is ignored or caught, any subsequent
     read returns with an end-of-file indication until the termi-
     nal  is  closed.  If  the  controlling process is not in the
     foreground process group of the terminal, a SIGTSTP is  sent
     to  the  terminal's  foreground process group.  Unless other
     arrangements  have  been  made,  these  signals  cause   the
     processes  to  stop.  Processes in background process groups
     that attempt to access the controlling terminal after  modem
     disconnect while the terminal is still allocated to the ses-
     sion will receive appropriate SIGTTOU and  SIGTTIN  signals.
     Unless other arrangements have been made, this signal causes
     the processes to stop.  The controlling terminal will remain
     in  this  state  until it is reinitialized with a successful
     open by the controlling process, or deallocated by the  con-
     trolling process.

  Terminal parameters
     The parameters that control  the  behavior  of  devices  and
     modules providing the termios interface are specified by the
     termios structure defined by <termios.h>.  Several  ioctl(2)



                                                                7





termio(7)              DEVICES AND MODULES              termio(7)



     system  calls that fetch or change these parameters use this
     structure that contains the following members:
          tcflagt     ciflag;           /* input modes */
          tcflagt     coflag;           /* output modes */
          tcflagt     ccflag;           /* control modes */
          tcflagt     clflag;           /* local modes */
          cct    ccc[NCCS];        /* control chars */
     The special control characters  are  defined  by  the  array
     ccc.  The  symbolic  name  NCCS is the size of the control-
     character array and is also  defined  by  <termios.h>.   The
     relative  positions,  subscript  names,  and typical default
     values for each function are as follows:
          0    VINTR     DEL
          1    VQUIT     FS
          2    VERSE     #
          3    VKILL     @
          4    VEOF      EOT
          5    VEOL      NUL
          6    VEOL2     NUL
          7    VSWTCH    NUL
          8    VSTRT     DC1
          9    VSTOP     DC3
          10   VSUSP     SUB
          11   VDSUSP    EM
          12   VREPRINT  DC2
          13   VDISCRD   SI
          14   VWERSE    ETB
          15   VLNEXT    SYN
          16-19          reserved

  Input modes
     The ciflag field describes the basic  terminal  input  con-
     trol:

          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 upper-case to lower-case on input.
          IXON   Enable start/stop output control.
          IXANY  Enable any character to restart output.
          IXOFF  Enable start/stop input control.
          IMAXBEL        Echo BEL on input line too long.

     If IGNBRK is set, a break  condition  (a  character  framing
     error  with  data  all  zeros) detected on input is ignored,
     that is, not put on the input queue and therefore  not  read



                                                                8





termio(7)              DEVICES AND MODULES              termio(7)



     by any process.  If IGNBRK is not set and BRKINT is set, the
     break condition shall flush 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
     ASCII NULL character ('\0'), or if PARMRK is set, as '\377',
     '\0', '\0'.

     If IGNPAR is set, a  byte  with  framing  or  parity  errors
     (other than break) is ignored.

     If PARMRK is set, and IGNPAR is not set, a byte with a fram-
     ing  or  parity  error  (other  than  break) is given to the
     application as the three-character sequence:  '\377',  '\0',
     X,  where  X  is the data of the byte received in error.  To
     avoid ambiguity in this case, if ISTRIP is not set, a  valid
     character  of  '\377' is given to the application as '\377',
     '\377'.  If neither IGNPAR nor PARMRK is set, a  framing  or
     parity  error (other than break) is given to the application
     as a single ASCII NULL character ('\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.  Note
     that whether input parity checking is enabled or disabled is
     independent of whether parity detection is enabled  or  dis-
     abled.  If  parity  detection  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 is set correctly or
     not.

     If ISTRIP is set, valid input characters are first  stripped
     to seven bits, otherwise all eight 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 upper case, alphabetic character
     is translated into the corresponding lower case character.

     If IXON is set, start/stop  output  control  is  enabled.  A
     received STOP character suspends output and a received START
     character restarts output.  The STOP  and  START  characters
     will not be read, but will merely perform flow control func-
     tions.  If IXANY is set, any input character restarts output
     that has been suspended.





                                                                9





termio(7)              DEVICES AND MODULES              termio(7)



     If IXOFF is set, the system transmits a STOP character  when
     the  input  queue is nearly full, and a START character when
     enough input has been read so that the input queue is nearly
     empty again.

     If IMAXBEL is set, the ASCII BEL character is echoed if  the
     input  stream  overflows.   Further input is not stored, but
     any input already present in the input stream  is  not  dis-
     turbed.  If  IMAXBEL is not set, no BEL character is echoed,
     and all input present in the input queue is discarded if the
     input stream overflows.

     The initial input control  value  is  BRKINT,  ICRNL,  IXON,
     ISTRIP.

  Output modes
     The coflag field specifies the system treatment of output:

          OPOST  Post-process output.
          OLCUC  Map lower case to upper 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 NULL.
          NLDLY  Select newline delays:
            NL0
            NL1
          CRDLY  Select carriage-return delays:
            CR0
            CR1
            CR2
            CR3
          TABDLY Select horizontal tab delays:
            TAB0 or tab expansion:
            TAB1
            TAB2
            TAB3 Expand tabs to spaces.
            XTABS        Expand tabs to spaces.
          BSDLY  Select backspace delays:
            BS0
            BS1
          VTDLY  Select vertical tab delays:
            VT0
            VT1
          FFDLY  Select form feed delays:
            FF0
            FF1

     If OPOST is set, output  characters  are  post-processed  as
     indicated  by the remaining flags; otherwise, characters are



                                                               10





termio(7)              DEVICES AND MODULES              termio(7)



     transmitted without change.

     If OLCUC is  set,  a  lower  case  alphabetic  character  is
     transmitted as the corresponding upper case 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 ONRET is set, the NL  character  is  assumed  to  do  the
     carriage-return function; the column pointer is set to 0 and
     the delays specified for CR  are  used.  Otherwise,  the  NL
     character  is assumed to do just the line-feed function; the
     column pointer remains 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 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 it is NULL.

     If a form-feed or vertical-tab delay is specified, it  lasts
     for about 2 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 are  transmit-
     ted.

     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 transmits four fill charac-
     ters.

     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 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 OPOST, ONLCR, TAB3.




                                                               11





termio(7)              DEVICES AND MODULES              termio(7)



  Control Modes
     The ccflag field describes the hardware control of the ter-
     minal:

          CBAUD  Baud rate:
            B0   Hang up
            B50  50 baud
            B75  75 baud
            B110 110 baud
            B134 134 baud
            B150 150 baud
            B200 200 baud
            B300 300 baud
            B600 600 baud
            B1200        1200 baud
            B1800        1800 baud
            B2400        2400 baud
            B4800        4800 baud
            B9600        9600 baud
            B19200       19200 baud
            EXTA External A
            B38400       38400 baud
            EXTB External B

          CSIZE  Character size:
            CS5  5 bits
            CS6  6 bits
            CS7  7 bits
            CS8  8 bits

          CSTOPB Send two stop bits, else one
          CREAD  Enable receiver
          PARENB Parity enable
          PARODD Odd parity, else even
          HUPCL  Hang up on last close
          CLOCAL Local line, else dial-up
          CIBAUD Input baud rate, if different from output rate
          PAREXT Extended parity for mark and space parity

     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 is not  asserted.   Normally,
     this  disconnects the line. If the CIBAUD bits are not zero,
     they specify the input baud rate, with the CBAUD bits speci-
     fying  the output baud rate; otherwise, the output and input
     baud rates are both specified by the CBAUD bits. The  values
     for the CIBAUD bits are the same as the values for the CBAUD
     bits,  shifted  left  IBSHIFT  bits.   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



                                                               12





termio(7)              DEVICES AND MODULES              termio(7)



     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 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; otherwise, even parity is used.

     If CREAD is set, the receiver  is  enabled.   Otherwise,  no
     characters are received.

     If HUPCL is set, the line is disconnected when the last pro-
     cess  with  the line open closes it or terminates.  That is,
     the data-terminal-ready signal is not asserted.

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

     The initial hardware control value after open is B300,  CS8,
     CREAD, HUPCL.

  Local modes
     The clflag field of the argument structure is used  by  the
     line  discipline  to  control terminal functions.  The basic
     line discipline provides the following:

          ISIG   Enable signals.
          ICANON Canonical input (erase and kill processing).
          XCASE  Canonical upper/lower presentation.
          ECHO   Enable echo.
          ECHOE  Echo erase character as BS-SP-BS.
          ECHOK  Echo NL after kill character.
          ECHONL Echo NL.
          NOFLSH Disable flush after interrupt or quit.
          TOSTOP Send SIGTTOU for background output.
          ECHOCTL        Echo control characters as ^char, delete as ^?.
          ECHOPRT        Echo erase character as character erased.
          ECHOKE BS-SP-BS erase entire line on line kill.
          FLUSHO Output is being flushed.
          PENDIN Retype pending input at next read or input character.
          IEXTEN Enable extended (implementation-defined) functions.

     If ISIG is set, each input character is checked against  the
     special control characters INTR, QUIT, SWTCH,  SUSP, STATUS,
     and DSUSP. If an input character matches one of  these  con-
     trol 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.




                                                               13





termio(7)              DEVICES AND MODULES              termio(7)



     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,
     and EOL2.  If ICANON is not set, read requests are satisfied
     directly from the input queue.   A  read  is  not  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  time  value
     represents tenths of seconds.

     If XCASE is set, and if ICANON is set, an upper case  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.

     1.   If ECHO and ECHOE are set, and ECHOPRT is not set,  the
          ERASE  and  WERASE characters are echoed as one or more
          ASCII BS SP BS, which clears the last character(s) from
          a CRT screen.

     2.   If ECHO and ECHOPRT are set, the first ERASE and WERASE
          character in a sequence echoes as a backslash (\), fol-
          lowed by the characters being erased. Subsequent  ERASE
          and WERASE characters echo the characters being erased,
          in reverse order.  The next non-erase character  causes
          a  slash  (/)  to be typed before it is echoed. ECHOPRT
          should be used for hard copy terminals.

     3.   If ECHOKE is set, the kill character is echoed by eras-
          ing  each  character on the line from the screen (using
          the mechanism selected by ECHOE and ECHOPRT).

     4.   If ECHOK is set, and ECHOKE is not set, the NL  charac-
          ter  is  echoed  after  the kill character to emphasize
          that  the  line  is  deleted.   Note  that  an   escape



                                                               14





termio(7)              DEVICES AND MODULES              termio(7)



          character (\) or an LNEXT character preceding the erase
          or kill character removes any special function.

     5.   If ECHONL is set, the NL character is  echoed  even  if
          ECHO  is  not  set. This is useful for terminals set to
          local echo (so called half-duplex).  If ECHOCTL is set,
          all control characters (characters with codes between 0
          and 37 octal) other than ASCII TAB, ASCII NL, the START
          character,  and the STOP character, ASCII CR, and ASCII
          BS are echoed as ^X, where X is the character given  by
          adding  100  octal to the code of the control character
          (so that the character with octal code 1 is  echoed  as
          ^A),  and the ASCII DEL character, with code 177 octal,
          is echoed as ^?.

     If NOFLSH is set, the normal flush of the input  and  output
     queues  associated  with the INTR, QUIT, and SUSP characters
     is not done. This bit should be set when  restarting  system
     calls  that  read  from  or  write to a terminal [see sigac-
     tion(2)].

     If TOSTOP is set, the signal SIGTTOU is sent  to  a  process
     that tries to write to its controlling terminal if it is not
     in the foreground process group  for  that  terminal.   This
     signal  normally  stops  the process.  Otherwise, the output
     generated by that process is output to  the  current  output
     stream.   Processes  that  are  blocking or ignoring SIGTTOU
     signals are excepted and allowed to produce output, if any.

     If FLUSHO is set, data written to the terminal is discarded.
     This  bit  is set when the FLUSH character is typed.  A pro-
     gram can cancel the effect of typing the FLUSH character  by
     clearing FLUSHO.

     If PENDIN is set, any input that has not yet  been  read  is
     reprinted when the next character arrives as input.

     If IEXTEN is set, the following implementation-defined func-
     tions are enabled: special characters (WERASE, REPRINT, DIS-
     CARD, and LNEXT) and local flags (TOSTOP, ECHOCTL,  ECHOPRT,
     ECHOKE, FLUSHO, and PENDIN).

     The initial line-discipline control value is  ISIG,  ICANON,
     ECHO, ECHOK.

  Minimum and Timeout
     The MIN and TIME  values  are  described  above  under  Non-
     canonical  mode  input processing.  The initial value of MIN
     is 1, and the initial value of TIME is 0.

  Terminal size
     The number of lines and columns on the terminal's display is



                                                               15





termio(7)              DEVICES AND MODULES              termio(7)



     specified    in    the    winsize   structure   defined   by
     <sys/termios.h> and includes the following members:

          unsigned  short   wsrow;   /* rows, in characters */
        unsigned  short   wscol;   /* columns, in characters */
        unsigned  short   wsxpixel;/* horizontal size, in pixels */
        unsigned  short   wsypixel;/* vertical size, in pixels */


  Termio structure
     The System V termio structure is used by some ioctls; it  is
     defined   by   <sys/termio.h>  and  includes  the  following
     members:

           unsigned    short   ciflag;/* input modes */
           unsigned    short   coflag;/* output modes */
           unsigned    short   ccflag;/* control modes */
           unsigned    short   clflag;/* local modes */
           char        cline; /* line discipline */
           unsigned    char    ccc[NCC];/* control chars */
     The special control characters  are  defined  by  the  array
     ccc.   The  symbolic  name  NCC is the size of the control-
     character array and is  also  defined  by  <termio.h>.   The
     relative  positions,  subscript  names,  and typical default
     values for each function are as follows:
          0   VINTR    DEL
          1   VQUIT    FS
          2   VERASE   #
          3   VKILL    @
          4   VEOF     EOT
          5   VEOL     NUL
          6   VEOL2    NUL
          7   reserved

     The calls that use the  termio  structure  only  affect  the
     flags  and control characters that can be stored in the ter-
     mio structure; all other flags and  control  characters  are
     unaffected.

  Modem lines
     On special files representing serial ports, the  modem  con-
     trol  lines  supported  by the hardware can be read, and the
     modem status lines supported by the hardware can be changed.
     The  following  modem  control  and status lines may be sup-
     ported by a device; they are defined by <sys/termios.h>:

          TIOCMLE  line enable
          TIOCMDTR data terminal ready
          TIOCMRTS request to send
          TIOCMST  secondary transmit
          TIOCMSR  secondary receive
          TIOCMCTS clear to send



                                                               16





termio(7)              DEVICES AND MODULES              termio(7)



          TIOCMCAR carrier detect
          TIOCMRNG ring
          TIOCMDSR data set ready
     TIOCMCD is a synonym  for  TIOCMCAR,  and  TIOCMRI  is  a
     synonym  for  TIOCMRNG.   Not  all of these are necessarily
     supported by any particular device; check  the  manual  page
     for the device in question.

IOCTLS
     The ioctls supported by devices and STREAMS modules  provid-
     ing  the termios interface are listed below.  Some calls may
     not be supported by all devices or modules.  The functional-
     ity  provided  by  these calls is also available through the
     preferred function call interface specified on termios(2).

     TCGETS         The argument is a pointer to a termios struc-
                    ture.   The  current  terminal parameters are
                    fetched and stored into that structure.

     TCSETS         The argument is a pointer to a termios struc-
                    ture.   The  current  terminal parameters are
                    set from the values stored in that structure.
                    The change is immediate.

     TCSETSW        The argument is a pointer to a termios struc-
                    ture.   The  current  terminal parameters are
                    set from the values stored in that structure.
                    The change occurs after all characters queued
                    for output have been transmitted.  This  form
                    should  be used when changing parameters that
                    affect output.

     TCSETSF        The argument is a pointer to a termios struc-
                    ture.   The  current  terminal parameters are
                    set from the values stored in that structure.
                    The change occurs after all characters queued
                    for output have been transmitted; all charac-
                    ters  queued for input are discarded and then
                    the change occurs.

     TCGETA         The argument is a pointer to a termio  struc-
                    ture.   The  current  terminal parameters are
                    fetched, and those  parameters  that  can  be
                    stored  in a termio structure are stored into
                    that structure.

     TCSETA         The argument is a pointer to a termio  struc-
                    ture.   Those terminal parameters that can be
                    stored in a termio structure are set from the
                    values  stored in that structure.  The change
                    is immediate.




                                                               17





termio(7)              DEVICES AND MODULES              termio(7)



     TCSETAW        The argument is a pointer to a termio  struc-
                    ture.   Those terminal parameters that can be
                    stored in a termio structure are set from the
                    values  stored in that structure.  The change
                    occurs after all characters queued for output
                    have  been  transmitted.  This form should be
                    used when  changing  parameters  that  affect
                    output.

     TCSETAF        The argument is a pointer to a termio  struc-
                    ture.  Those  terminal parameters that can be
                    stored in a termio structure are set from the
                    values  stored in that structure.  The change
                    occurs after all characters queued for output
                    have  been transmitted; all characters queued
                    for input are discarded and then  the  change
                    occurs.

     TCSBRK         The argument is an int value.  Wait  for  the
                    output  to drain.  If the argument is 0, then
                    send a  break  (zero  valued  bits  for  0.25
                    seconds).

     TCXONC         Start/stop control.  The argument is  an  int
                    value.  If the argument is 0, suspend output;
                    if 1, restart suspended output; if 2, suspend
                    input; if 3, restart suspended input.

     TCFLSH         The argument is an int value.  If  the  argu-
                    ment is 0, flush the input queue; if 1, flush
                    the output queue; if 2, flush both the  input
                    and output queues.

     TIOCGPGRP      The argument is a pointer to  a  pidt.   Set
                    the  value of that pidt to the process group
                    ID of the foreground process group associated
                    with  the  terminal.   See  termios(2)  for a
                    description or TCGETPGRP.

     TIOCSPGRP      The argument is a pointer to a pidt.   Asso-
                    ciate  the  process group whose process group
                    ID is specified by the value  of  that  pidt
                    with  the  terminal.   The  new process group
                    value must be in the range of  valid  process
                    group  ID  values. Otherwise, the error EPERM
                    is returned.  See termios(2) for  a  descrip-
                    tion of TCSETPGRP.

     TIOCGSID       The argument is a pointer to  a  pidt.   The
                    session  ID  of  the  terminal is fetched and
                    stored in the pidt.




                                                               18





termio(7)              DEVICES AND MODULES              termio(7)



     TIOCGWINSZ     The argument is a pointer to a winsize struc-
                    ture.   The  terminal  driver's notion of the
                    terminal size is stored into that structure.

     TIOCSWINSZ     The argument is a pointer to a winsize struc-
                    ture.   The  terminal  driver's notion of the
                    terminal size is set from the  values  speci-
                    fied in that structure.  If the new sizes are
                    different from the old sizes, a SIGWINCH sig-
                    nal is set to the process group of the termi-
                    nal.

     TIOCMBIS       The argument is a pointer  to  an  int  whose
                    value  is  a  mask  containing  modem control
                    lines to be turned  on.   The  control  lines
                    whose bits are set in the argument are turned
                    on; no other control lines are affected.

     TIOCMBIC       The argument is a pointer  to  an  int  whose
                    value  is  a  mask  containing  modem control
                    lines to be turned off.   The  control  lines
                    whose bits are set in the argument are turned
                    off; no other control lines are affected.

     TIOCMGET       The argument is a pointer  to  an  int.   The
                    current  state  of  the modem status lines is
                    fetched and stored in the int pointed  to  by
                    the argument.

     TIOCMSET       The argument is a pointer to an int  contain-
                    ing  a  new  set of modem control lines.  The
                    modem control lines are  turned  on  or  off,
                    depending on whether the bit for that mode is
                    set or clear.

FILES
     files in or under /dev

SEE ALSO
     fork(2),   ioctl(2),   setsid(2),   signal(2),   termios(2),
     streamio(7).














                                                               19



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