NAME

     termios,   tcgetattr,   tcsetattr,   tcsendbreak,   tcdrain,
     tcflush,   tcflow,   cfmakeraw,   cfgetospeed,  cfgetispeed,
     cfsetispeed, cfsetospeed, tcgetpgrp, tcsetpgrp - get and set
     terminal  attributes,  line  control, get and set baud rate,
     get and set terminal foreground process group ID


SYNOPSIS

     #include <termios.h>
     #include <unistd.h>

     int tcgetattr ( int fd, struct termios *termios_p );

     int tcsetattr ( int fd, int optional_actions, struct termios
     *termios_p

     int tcsendbreak ( int fd, int duration );

     int tcdrain ( int fd );

     int tcflush ( int fd, int queue_selector );

     int tcflow ( int fd, int action );

     int cfmakeraw ( struct termios *termios_p );

     speed_t cfgetospeed ( struct termios *termios_p );

     int cfsetospeed ( struct termios *termios_p, speed_t speed
     );

     speed_t cfgetispeed ( struct termios *termios_p );

     int cfsetispeed ( struct termios *termios_p, speed_t speed
     );

     pid_t tcgetpgrp ( int fd );

     int tcsetpgrp ( int fd, pid_t pgrpid );


DESCRIPTION

     The termios functions describe a general terminal  interface
     that  is  provided  to  control  asynchronous communications
     ports.

     Many of the functions described here have a termios_p  argu-
     ment  that is a pointer to a termios structure.  This struc-





     ture contains the following members:

          tcflag_t c_iflag;      /* input modes */
          tcflag_t c_oflag;      /* output modes */
          tcflag_t c_cflag;      /* control modes */
          tcflag_t c_lflag;      /* local modes */
          cc_t c_cc[NCCS];       /* control chars */


     c_iflag flag constants:

     IGNBRK
          ignore BREAK condition on input

     BRKINT
          If IGNBRK is not set, generate SIGINT on  BREAK  condi-
          tion, else read BREAK as character \0.

     IGNPAR
          ignore framing errors and parity errors.

     PARMRK
          if IGNPAR is not set, prefix a character with a  parity
          error or framing error with \377 \0.  If neither IGNPAR
          nor PARMRK is set, read a character with a parity error
          or framing error as \0.

     INPCK
          enable input parity checking

     ISTRIP
          strip off eighth bit

     INLCR
          translate NL to CR on input

     IGNCR
          ignore carriage return on input

     ICRNL
          translate carriage return to newline on  input  (unless
          IGNCR is set)

     IUCLC
          map uppercase characters to lowercase on input

     IXON enable XON/XOFF flow control on output

     IXANY
          enable any character to restart output

     IXOFF
          enable XON/XOFF flow control on input

     IMAXBEL
          ring bell when input queue is full

     c_oflag flag constants:

     OPOST
          enable implementation-defined output processing

     OLCUC
          map lowercase characters to uppercase on output

     ONLCR
          map NL to CR-NL on output

     OCRNL
          map CR to NL on output

     ONOCR
          don't output CR at column 0

     ONLRET
          don't output CR

     OFILL
          send fill characters for a delay, rather than  using  a
          timed delay

     OFDEL
          fill character is ASCII DEL.  If unset, fill  character
          is ASCII NUL

     NLDLY
          newline delay mask.  Values are NL0 and NL1.

     CRDLY
          carriage return delay mask.  Values are CR0, CR1,  CR2,
          or CR3.

     TABDLY
          horizontal tab delay  mask.   Values  are  TAB0,  TAB1,
          TAB2, TAB3, or XTABS.  A value of XTABS expands tabs to
          spaces (with tab stops every eight columns).

     BSDLY
          backspace delay mask.  Values are BS0 or BS1.

     VTDLY
          vertical tab delay mask.  Values are VT0 or VT1.

     FFDLY
          form feed delay mask.  Values are FF0 or FF1.

     c_cflag flag constants:

     CSIZE
          character size mask.  Values are CS5, CS6, CS7, or CS8.

     CSTOPB
          set two stop bits, rather than one.

     CREAD
          enable receiver.

     PARENB
          enable parity generation on output and parity  checking
          for input.

     PARODD
          parity for input and output is odd.

     HUPCL
          lower modem control lines after last process closes the
          device (hang up).

     CLOCAL
          ignore modem control lines

     CIBAUD
          mask for input speeds (not used).

     CRTSCTS
          flow control.

     c_lflag flag constants:

     ISIG when any of the characters INTR, QUIT, SUSP,  or  DSUSP
          are received, generate the corresponding signal.

     ICANON
          enable canonical mode.  This enables the special  char-
          acters  EOF,  EOL,  EOL2, ERASE, KILL, REPRINT, STATUS,
          and WERASE, and buffers by lines.

     XCASE
          if ICANON is also  set,  terminal  is  uppercase  only.
          Input  is converted to lowercase, except for characters
          preceded by \.  On  output,  uppercase  characters  are
          preceded by \ and lowercase characters are converted to
          uppercase.

     ECHO echo input characters.

     ECHOE
          if ICANON is also set, the ERASE character  erases  the
          preceding   input  character,  and  WERASE  erases  the
          preceding word.

     ECHOK
          if ICANON is also set, the KILL  character  erases  the
          current line.

     ECHONL
          if ICANON is also set, echo the NL  character  even  if
          ECHO is not set.

     ECHOCTL
          if ECHO is also set, ASCII control signals  other  than
          TAB,  NL,  START, and STOP are echoed as ^X, where X is
          the character with ASCII code  0x40  greater  than  the
          control  signal.   For  example, character 0x08 (BS) is
          echoed as ^H.

     ECHOPRT
          if ICANON  and  IECHO  are  also  set,  characters  are
          printed as they are being erased.

     ECHOKE
          if ICANON is also set, KILL is echoed by  erasing  each
          character  on  the  line,  as  specified  by  ECHOE and
          ECHOPRT.

     FLUSHO
          output is being flushed.  This flag is toggled by  typ-
          ing the DISCARD character.

     NOFLSH
          disable flushing the input and output queues when  gen-
          erating  the  SIGINT  and SIGQUIT signals, and flushing
          the input queue when generating the SIGSUSP signal.

     TOSTOP
          send the SIGTTOU signal to the process group of a back-
          ground  process which tries to write to its controlling
          terminal.

     PENDIN
          all characters in the input queue  are  reprinted  when
          the  next  character  is read.  (bash handles typeahead
          this way.)

     IEXTEN
          enable implementation-defined input processing.


     tcgetattr() gets the parameters associated with  the  object
     referred  by  fd  and  stores  them in the termios structure
     referenced by termios_p.  This function may be invoked  from
     a  background  process; however, the terminal attributes may
     be subsequently changed by a foreground process.

     tcsetattr() sets the parameters associated with the terminal
     (unless  support  is  required  from the underlying hardware
     that is not available) from the termios  structure  referred
     to by termios_p. optional_actions specifies when the changes
     take effect:

     TCSANOW
          the change occurs immediately.

     TCSADRAIN
          the change occurs after all output written  to  fd  has
          been  transmitted.   This  function should be used when
          changing parameters that affect output.

     TCSAFLUSH
          the change occurs  after  all  output  written  to  the
          object  referred  by  fd  has been transmitted, and all
          input that has been received but not read will be  dis-
          carded before the change is made.

     tcsendbreak() transmits a continuous stream  of  zero-valued
     bits for a specific duration, if the terminal is using asyn-
     chronous serial data transmission.  If duration is zero,  it
     transmits  zero-valued  bits  for at least 0.25 seconds, and
     not more that 0.5 seconds.  If  duration  is  not  zero,  it
     sends zero-valued bits for duration*N seconds, where N is at
     least 0.25, and not more than 0.5.

     If the  terminal  is  not  using  asynchronous  serial  data
     transmission,   tcsendbreak()  returns  without  taking  any
     action.

     tcdrain() waits until  all  output  written  to  the  object
     referred to by fd has been transmitted.

     tcflush() discards data written to the object referred to by
     fd  but  not  transmitted,  or  data  received but not read,
     depending on the value of queue_selector:

     TCIFLUSH
          flushes data received but not read.

     TCOFLUSH
          flushes data written but not transmitted.

     TCIOFLUSH
          flushes both data received but not read, and data writ-
          ten but not transmitted.

     tcflow() suspends transmission or reception of data  on  the
     object referred to by fd, depending on the value of action:

     TCOOFF
          suspends output.

     TCOON
          restarts suspended output.

     TCIOFF
          transmits a STOP character, which  stops  the  terminal
          device from transmitting data to the system.

     TCION
          transmits a START character, which starts the  terminal
          device transmitting data to the system.

     The default on open of a terminal file is that  neither  its
     input nor its output is suspended.

     The baud rate functions are provided for getting and setting
     the values of the input and output baud rates in the termios
     structure.   The  new  values  do  not  take  effect   until
     tcsetattr() is successfully called.

     Setting the speed to B0 instructs the modem  to  "hang  up".
     The  actual  bit rate corresponding to B38400 may be altered
     with setserial(8).

     The input and output baud rates are stored  in  the  termios
     structure.

     cfmakeraw sets the terminal attributes as follows:
                 termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
                                 |INLCR|IGNCR|ICRNL|IXON);
                 termios_p->c_oflag &= ~OPOST;
                 termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
                 termios_p->c_cflag &= ~(CSIZE|PARENB);
                 termios_p->c_cflag |= CS8;

     cfgetospeed() returns the output baud  rate  stored  in  the
     termios structure pointed to by termios_p.

     cfsetospeed() sets the output baud rate stored in  the  ter-
     mios  structure pointed to by termios_p to speed, which must
     be one of these constants:
          B0
          B50
          B75
          B110
          B134
          B150
          B200
          B300
          B600
          B1200
          B1800
          B2400
          B4800
          B9600
          B19200
          B38400
          B57600
          B115200
          B230400
     The zero baud rate, B0, is used to terminate the connection.
     If  B0 is specified, the modem control lines shall no longer
     be asserted.   Normally,  this  will  disconnect  the  line.
     CBAUDEX  is  a  mask  for the speeds beyond those defined in
     POSIX.1 (57600  and  above).   Thus,  B57600  &  CBAUDEX  is
     nonzero.

     cfgetispeed() returns the input baud rate stored in the ter-
     mios structure.

     cfsetispeed() sets the input baud rate stored in the termios
     structure  to speed.  If the input baud rate is set to zero,
     the input baud rate will be equal to the output baud rate.

     tcgetpgrp() returns process group ID of foreground  process-
     ing group, or -1 on error.

     tcsetpgrp() sets process group ID to pgrpid.  pgrpid must be
     the ID of a process group in the same session.


RETURN VALUES

     cfgetispeed() returns the input baud rate stored in the ter-
     mios structure.

     cfgetospeed() returns the output baud  rate  stored  in  the
     termios structure.

     tcgetpgrp() returns process group ID of foreground  process-
     ing group, or -1 on error.

     All other functions return:

     0    on success.

     -1   on failure and set errno to indicate the error.


SEE ALSO

     setserial(8)