TTY.4
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:23k
源码类别:

操作系统开发

开发平台:

C/C++

  1. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  2. NAME
  3.      tty, termios - terminals
  4. DESCRIPTION
  5.      The tty driver family takes care  of  all  user  input  and  output.   It
  6.      governs  the  keyboard,  the  console, the serial lines, and pseudo ttys.
  7.      Input on any of these devices undergoes "input  processing",  and  output
  8.      undergoes  "output processing" according to the standard termios terminal
  9.      interface.
  10.   Input processing
  11.      Each terminal device has an input queue.  This queue  is  used  to  store
  12.      preprocessed  input  characters, and to perform the backspacing and erase
  13.      functions.  Some special characters like a newline make the  contents  of
  14.      the  queue  available to a process reading from the terminal.  Characters
  15.      up to and including the newline, or another so-called "line  break",  may
  16.      be  read by a process.  The process need not read all characters at once.
  17.      An input line may be read byte by byte if one wants  to.   A  line  break
  18.      just makes characters available for reading, thats all.
  19.      When data is made available depends on whether the tty  is  in  canonical
  20.      mode  or  not.   In  canonical  mode the terminal processes input line by
  21.      line.  A line ends with a newline (NL), end-of-file (EOF), or end-of-line
  22.      (EOL).   Characters that have not been delimited by such a line break may
  23.      be erased one by one with the ERASE character or all  at  once  with  the
  24.      KILL  character.   Once  a  line  break  is  typed  the characters become
  25.      available to a reading process and can no longer be  erased.   Once  read
  26.      they  are removed from the input queue.  Several lines may be gathered in
  27.      the input queue if no reader is present to read them, but  a  new  reader
  28.      will  only  receive  one line.  Two line breaks are never returned in one
  29.      read call.  The input queue has a maximum length of MAX_CANON characters.
  30.      Any  more  characters  are discarded.  One must use ERASE or KILL to make
  31.      the  terminal  functioning  again  if  the  input  queue  fills  up.   If
  32.      nonblocking  I/O  is  set then -1 is returned with errno set to EAGAIN if
  33.      the reader would otherwise be blocked.
  34.      In non-canonical mode (raw mode for short) all characters are immediately
  35.      available  to the reader in principle.  One may however tune the terminal
  36.      to bursty input with the  MIN  and  TIME  parameters,  see  the  raw  I/O
  37.      parameters section below.  In raw mode no characters are discarded if the
  38.      input queue threatens to overflow if the device supports flow control.
  39.   Output processing
  40.      Characters written to a terminal device may  undergo  output  processing,
  41.      which  is  usually  just inserting a carriage returns before newlines.  A
  42.      writer may return before all characters are output if the characters  can
  43.      be  stored  in the output buffers.  If not then the writer may be blocked
  44.      until space is available.  If non-blocking I/O is set then only the count
  45.      of the number of bytes that can be processed immediately is returned.  If
  46.      no characters can be written at all then -1 is returned with errno set to
  47.                                                                              1
  48. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  49.      EAGAIN.
  50.   Special characters
  51.      Some characters have special functions in some  of  the  terminal  modes.
  52.      These  characters  are  as  follows,  with  the  Minix  defaults shown in
  53.      parentheses:
  54.      INTR (^?)
  55.           Special input character that is recognized if  ISIG  is  set.   (For
  56.           ISIG  and  other  flags  see  the various modes sections below.)  It
  57.           causes a SIGINT signal to be sent to all processes in  the  terminal
  58.           process group.  (See the section on session leaders below.)
  59.      QUIT (^)
  60.           Special input character if ISIG is set.  Causes a SIGQUIT signal  to
  61.           be sent to the terminal process group.
  62.      ERASE (^H)
  63.           Special input character if ICANON is set.  Erases the last character
  64.           in the current line.
  65.      KILL (^U)
  66.           Special input character if ICANON is set.  Erases the entire line.
  67.      EOF (^D)
  68.           Special input character if ICANON  is  set.   It  is  a  line  break
  69.           character  that is not itself returned to a reader.  If EOF is typed
  70.           with no input present then the read  returns  zero,  which  normally
  71.           causes the reader to assume that end-of-file is reached.
  72.      CR (^M)
  73.           Special input character if IGNCR or ICRNL is set.  It is a  carriage
  74.           return  ('r').   If IGNCR is set then CR is discarded.  If ICRNL is
  75.           set and IGNCR is not set then CR is changed into an NL and  has  the
  76.           same function as NL.
  77.      NL (^J)
  78.           Special input character if ICANON is set.   It  is  both  a  newline
  79.           ('n') and a line break.
  80.           Special output character if OPOST  and  ONLCR  are  set.   A  CR  NL
  81.           sequence  is output instead of just NL.  (Minix specific, but almost
  82.           mandatory on any UNIX-like system.)
  83.      TAB (^I)
  84.           Special character on output if OPOST  and  XTABS  are  set.   It  is
  85.           transformed  into  the  number of spaces necessary to reach a column
  86.           position that is a multiple of eight.  (Only  needed  for  terminals
  87.           without hardware tabs.)
  88.                                                                              2
  89. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  90.      EOL (undefined)
  91.           Special input character if ICANON is set.  It is an additional  line
  92.           break.
  93.      SUSP (^Z)
  94.           Special input character if job control is implemented  and  ISIG  is
  95.           set.   It causes a SIGTSTP signal to be send to the terminal process
  96.           group.  (Minix does not have job control.)
  97.      STOP (^S)
  98.           Special input character if IXON is set.  It suspends terminal output
  99.           and is then discarded.
  100.      START (^Q)
  101.           Special output character if IXON is set.  It starts terminal  output
  102.           if  suspended  and is then discarded.  If IXANY is also set then any
  103.           other character also  starts  terminal  output,  but  they  are  not
  104.           discarded.
  105.      REPRINT (^R)
  106.           Special input character if IEXTEN and ECHO are  set.   Reprints  the
  107.           input  queue  from  the  last  line  break  onwards.  A reprint also
  108.           happens automatically if the echoed input  has  been  messed  up  by
  109.           other output and ERASE is typed.
  110.      LNEXT (^V)
  111.           Special input character if IEXTEN is set.  It is the "literal  next"
  112.           character  that  causes  the  next character to be input without any
  113.           special processing.
  114.      DISCARD (^O)
  115.           Special input character if IEXTEN  is  set.   Causes  output  to  be
  116.           discarded  until  it is typed again.  (Implemented only under Minix-
  117.           vmd.)
  118.      All of these characters except CR, NL and TAB may be changed or  disabled
  119.      under  Minix.   (Changes  to  START  and  STOP may be ignored under other
  120.      termios implementations.)  The REPRINT and  LNEXT  characters  are  Minix
  121.      extensions  that are commonly present in other implementations.  POSIX is
  122.      unclear on whether IEXTEN, IGNCR and  ICRNL  should  be  active  in  non-
  123.      canonical mode, but under Minix they are.
  124.   Terminal attributes
  125.      The attributes of  a  terminal,  such  as  whether  the  mode  should  be
  126.      canonical  or  non-canonical,  are  controlled  by  routines that use the
  127.      termios structure as defined in <termios.h>:
  128.           struct termios {
  129.               tcflag_t  c_iflag;       /* input modes */
  130.               tcflag_t  c_oflag;       /* output modes */
  131.                                                                              3
  132. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  133.               tcflag_t  c_cflag;       /* control modes */
  134.               tcflag_t  c_lflag;       /* local modes */
  135.               speed_t   c_ispeed;      /* input speed */
  136.               speed_t   c_ospeed;      /* output speed */
  137.               cc_t      c_cc[NCCS];    /* control characters */
  138.           };
  139.      The types tcflag, speed_t and cc_t are defined in <termios.h> as unsigned
  140.      integral types.
  141.   Input Modes
  142.      The c_iflag field contains the following single bit  flags  that  control
  143.      input processing:
  144.      ICRNL
  145.           Map CR to NL on input.
  146.      IGNCR
  147.           Ignore CR on input.  This flag overrides ICRNL.
  148.      INLCR
  149.           Map NL to CR on input.  This is done after the IGNCR check.
  150.      IXON Enable start/stop output control.
  151.      IXOFF
  152.           Enable start/stop input control.  (Not implemented.)
  153.      IXANY
  154.           Allow any character to restart output.  (Minix specific.)
  155.      ISTRIP
  156.           Strip characters to seven bits.
  157.      IGNPAR
  158.           Ignore characters with parity errors.  (Not implemented.)
  159.      INPCK
  160.           Enable input parity checking.  (Not implemented.)
  161.      PARMRK
  162.           Mark parity errors by preceding the faulty  character  with  '377',
  163.           ''.   The  character '377' is preceded by another '377' to avoid
  164.           ambiguity.  (Not implemented.)
  165.      BRKINT
  166.           Send the signal SIGINT to the terminal process group when  receiving
  167.           a break condition.  (Not implemented.)
  168.                                                                              4
  169. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  170.      IGNBRK
  171.           Ignore break condition.  If neither BRKINT or IGNBRK is set a  break
  172.           is  input  as  a  single  '', or if PARMRK is set as '377', '',
  173.           ''.  (Breaks are always ignored.)
  174.   Output Modes
  175.      The c_oflag field contains the following single bit  flags  that  control
  176.      output processing:
  177.      OPOST
  178.           Perform output processing.  This flag is the "main switch" on output
  179.           processing.  All other flags are Minix specific.
  180.      ONLCR
  181.           Transform an NL to a CR NL sequence on  output.   Note  that  a  key
  182.           labeled  "RETURN"  or  "ENTER" usually sends a CR.  In line oriented
  183.           mode this is normally transformed into  NL  by  ICRNL.   NL  is  the
  184.           normal  UNIX  line delimiter ('n').  On output an NL is transformed
  185.           into the CR NL sequence that is necessary to reach the first  column
  186.           of  the next line.  (This is a common output processing function for
  187.           UNIX-like systems, but not always separately switchable by an  ONLCR
  188.           flag.)
  189.      XTABS
  190.           Transform a TAB into the number  of  spaces  necessary  to  reach  a
  191.           column position that is a multiple of eight.
  192.      ONOEOT
  193.           Discard EOT (^D) characters.  (Minix-vmd only.)
  194.   Control Modes
  195.      The c_cflag field contains the following single bit flags and  bit  field
  196.      for basic hardware control:
  197.      CLOCAL
  198.           Ignore modem status lines.
  199.      CREAD
  200.           Enable receiver.  (The receiver is always enabled.)
  201.      CSIZE
  202.           Number of bits per byte.  CSIZE masks off the values CS5,  CS6,  CS7
  203.           and CS8 that indicate that 5, 6, 7 or 8 bits are used.
  204.      CSTOPB
  205.           Send two stop bits instead of one.  Two stop bits are normally  used
  206.           at 110 baud or less.
  207.                                                                              5
  208. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  209.      PARENB
  210.           Enable parity generation.
  211.      PARODD
  212.           Generate odd parity if parity is generated, otherwise even parity.
  213.      HUPCL
  214.           Drop the modem control lines on the last close of the terminal line.
  215.           (Not implemented.)
  216.   Local Modes
  217.      The c_lflag field contains the following single bit  flags  that  control
  218.      various functions:
  219.      ECHO Enable echoing of  input  characters.   Most  input  characters  are
  220.           echoed  as they are.  Control characters are echoed as ^X where X is
  221.           the letter used to say that the control character  is  CTRL-X.   The
  222.           CR, NL and TAB characters are echoed with their normal effect unless
  223.           they are escaped by LNEXT.
  224.      ECHOE
  225.           If ICANON and ECHO are set then echo ERASE and KILL as one  or  more
  226.           backspace-space-backspace  sequences  to wipe out the last character
  227.           or the entire line, otherwise they are echoed as they are.
  228.      ECHOK
  229.           If ICANON and ECHO are set and ECHOE is not set then  output  an  NL
  230.           after  the  KILL  character.   (For hardcopy terminals it is best to
  231.           unset ECHOE and to set ECHOK.)
  232.      ECHONL
  233.           Echo NL even if ECHO is not set, but ICANON is set.
  234.      ICANON
  235.           Canonical input.  This enables line oriented  input  and  erase  and
  236.           kill processing.
  237.      IEXTEN
  238.           Enable implementation defined input extensions.
  239.      ISIG Enable the signal characters INTR, QUIT and SUSP.
  240.      NOFLSH
  241.           Disable the flushing of the input and output queues that is normally
  242.           done if a signal is sent.
  243.      TOSTOP
  244.           Send a SIGTTOU signal if job control is implemented and a background
  245.           process tries to write.  (Minix has no job control.)
  246.                                                                              6
  247. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  248.   Input and output speed
  249.      The input and output speed are encoded into  the  c_ispeed  and  c_ospeed
  250.      fields.   <termios.h> defines the symbols B0, B50, B75, B110, B134, B150,
  251.      B200, B300, B600, B1200, B1800,  B2400,  B4800,  B9600,  B19200,  B38400,
  252.      B57600  and B115200 as values used to indicate the given baud rates.  The
  253.      zero baud rate, B0, if used for the input speed causes the input speed to
  254.      be  equal to the output speed.  Setting the output speed to zero hangs up
  255.      the line.  One should use  the  functions  cfgetispeed(),  cfgetospeed(),
  256.      cfsetispeed()  and  cfsetospeed()  to  get  or  set  a speed, because the
  257.      c_ispeed  and  c_ospeed  fields  may   not   be   visible   under   other
  258.      implementations.   (The  c_ispeed  and c_ospeed fields and the B57600 and
  259.      B115200 symbols are Minix specific.)
  260.   Special characters
  261.      The c_cc array contains the special characters that can be modified.  The
  262.      array  has  length  NCCS  and  is  subscripted by the symbols VEOF, VEOL,
  263.      VERASE, VINTR, VKILL, VMIN, VQUIT, VTIME, VSUSP, VSTART, VSTOP, VREPRINT,
  264.      VLNEXT and VDISCARD.  All these symbols are defined in <termios.h>.  Some
  265.      implementations may give the same values to the VMIN and VTIME subscripts
  266.      and  the VEOF and VEOL subscripts respectively, and may ignore changes to
  267.      START and STOP.  (Under Minix all special characters have there own  c_cc
  268.      slot and can all be modified.)
  269.   Raw I/O Parameters
  270.      The MIN and TIME parameters can be used to adjust  a  raw  connection  to
  271.      bursty  input.   MIN  represents  a  minimum number of bytes that must be
  272.      received before a read call returns.  TIME  is  a  timer  of  0.1  second
  273.      granularity that can be used to time out a read.  Setting either of these
  274.      parameters to zero has special meaning, which leads to the following four
  275.      possibilities:
  276.      MIN > 0, TIME > 0
  277.           TIME is an inter-byte timer that is started (and restarted)  when  a
  278.           byte is received.  A read succeeds when either the minimum number of
  279.           characters is received or the timer expires.  Note  that  the  timer
  280.           starts  after  the first character, so the read returns at least one
  281.           byte.
  282.      MIN > 0, TIME = 0
  283.           Now the timer is disabled, and a reader blocks indefinitely until at
  284.           least MIN characters are received.
  285.      MIN = 0, TIME > 0
  286.           TIME is now a read timer that is started when a  read  is  executed.
  287.           The  read  will  return if the read timer expires or if at least one
  288.           byte is input.  (Note that a value of zero may be  returned  to  the
  289.           reader.)
  290.                                                                              7
  291. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  292.      MIN = 0, TIME = 0
  293.           The bytes currently available are returned.  Zero is returned if  no
  294.           bytes are available.
  295.   User Level Functions
  296.      Termios attributes are set or examined,  and  special  functions  can  be
  297.      performed by using the functions described in termios(2).
  298.   Session Leaders and Process Groups
  299.      With the use of the setsid() function can  a  process  become  a  session
  300.      leader.   A  session leader forms a process group with a process group id
  301.      equal to the process id of the session leader.  If a session leader opens
  302.      a  terminal device file then this terminal becomes the controlling tty of
  303.      the session leader.  Unless the terminal is already the  controlling  tty
  304.      of  another  process,  or unless the O_NOCTTY flag is used to prevent the
  305.      allocation of a controlling tty.  The process group of the session leader
  306.      is  now  remembered as the terminal process group for signals sent by the
  307.      terminal driver.  All the  children  and  grandchildren  of  the  session
  308.      leader  inherit  the  controlling  terminal  and process group until they
  309.      themselves use setsid().
  310.      The controlling tty becomes inaccessible to the children of  the  session
  311.      leader  when the session leader exits, and a hangup signal is sent to all
  312.      the members of the process  group.   The  input  and  output  queues  are
  313.      flushed  on  the last close of a terminal and all attributes are reset to
  314.      the default state.
  315.      A special device /dev/tty is a synonym  for  the  controlling  tty  of  a
  316.      process.   It  allows  a process to reach the terminal even when standard
  317.      input, output and error are redirected.  Opening this device can also  be
  318.      used as a test to see if a process has a controlling tty or not.
  319.      For Minix a special write-only device /dev/log exists for processes  that
  320.      want  to  write  messages to the system console.  Unlike the console this
  321.      device is still accessible when a session leader exits.
  322.      Minix-vmd also has a /dev/log device, but this device is read-write.  All
  323.      messages  written  to the log device or to the console when X11 is active
  324.      can be read from /dev/log.  The system tries to preserve the  log  buffer
  325.      over  a  reboot  so that panic messages reappear in the log if the system
  326.      happens to crash.
  327.   Pseudo Terminals
  328.      Pseudo ttys allow a process such as a remote login daemon  to  set  up  a
  329.      terminal  for  a  remote  login session.  The login session uses a device
  330.      like /dev/ttyp0 for input and output, and the remote  login  daemon  uses
  331.      the  device  /dev/ptyp0  to supply input to or take output from the login
  332.      session and transfer this to or from  the  originating  system.   So  the
  333.      character  flow  may  be:   Local user input sent to the remote system is
  334.      written to  /dev/ptyp0  by  the  remote  login  daemon,  undergoes  input
  335.                                                                              8
  336. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  337.      processing and appears on /dev/ttyp0  as  input  to  the  login  session.
  338.      Output  from the login session to /dev/ttyp0 undergoes output processing,
  339.      is read from /dev/ptyp0 by the remote login daemon and is  send  over  to
  340.      the  local  system to be displayed for the user.  (So there are only four
  341.      data streams to worry about in a pseudo terminal.)
  342.      A pseudo terminal can be allocated by trying to open all the  controlling
  343.      devices /dev/ptynn one by one until it succeeds.  Further opens will fail
  344.      once a pty is open.  The process should now fork, the child should become
  345.      session leader, open the tty side of the pty and start a login session.
  346.      If the tty side is eventually closed down then reads from  the  pty  side
  347.      will  return zero and writes return -1 with errno set to EIO.  If the pty
  348.      side is closed first then a SIGHUP signal is sent to the  session  leader
  349.      and further reads from the tty side return zero and writes return -1 with
  350.      errno set to EIO.  (Special note:  A line erase may  cause  up  to  three
  351.      times  the  size  of  the tty input queue to be sent to the pty reader as
  352.      backspace overstrikes.  Some of this output  may  get  lost  if  the  pty
  353.      reader cannot accept it all at once in a single read call.)
  354.   Backwards compatibility
  355.      The TIOCGETP, TIOCSETP, TIOCGETC and TIOCSETC ioctl  functions  that  are
  356.      used  by  the  old  sgtty  terminal  interface are still supported by the
  357.      terminal driver by emulation.   Note  that  these  old  functions  cannot
  358.      control  all  termios attributes, so the terminal must be in a relatively
  359.      sane state to avoid problems.
  360. FILES
  361.      The list below shows all devices that Minix and Minix-vmd have.  Not  all
  362.      of  these  devices  are  configured  in  by  default, as indicated by the
  363.      numbers (i/j/k,  l/m/n)  that  tell  the  minimum,  default  and  maximum
  364.      possible number of these devices for Minix (i/j/k) and Minix-vmd (l/m/n).
  365.      /dev/console        System console.
  366.      /dev/ttyc[1-7]      Virtual consoles.  (0/1/7, 0/1/7)
  367.      /dev/log            Console log device.
  368.      /dev/tty0[0-3]      Serial lines.  (0/2/2, 4/4/4)
  369.      /dev/tty[p-w][0-f]  Pseudo ttys.  (0/0/64, 1/32/128)
  370.      /dev/pty[p-w][0-f]  Associated pseudo tty controllers.
  371. SEE ALSO
  372.      stty(1), termios(3), setsid(2), read(2), write(2).
  373.                                                                              9
  374. TTY(4)                    Minix Programmer's Manual                     TTY(4)
  375. BUGS
  376.      A fair number of flags are not implemented under  Minix  (yet).   Luckily
  377.      they  are  very limited utility and only apply to RS-232, not to the user
  378.      interface.
  379. AUTHOR
  380.      Kees J. Bot (kjb@cs.vu.nl)
  381.                                                                             10