termios,
TERMIOS(S)          Linux Programmer's Manual          TERMIOS(S)



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 cfgetispeed(struct termios *termios_p);

       speed_t cfgetospeed(struct termios *termios_p);

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

       int cfsetospeed(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  inter-
       face  that  is provided to control asynchronous communica-
       tions ports.

       Many of the functions  described  here  have  a  termios_p
       argument  that  is a pointer to a termios structure.  This
       structure contains at least 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 set, a BREAK is ignored. If it is  not
              set  but  BRKINT  is  set,  then a BREAK causes the
              input and output queues to be flushed, and  if  the
              terminal  is  the  controlling  terminal of a fore-
              ground process group, it will cause a SIGINT to  be
              sent  to  this foreground process group.  When nei-
              ther IGNBRK nor BRKINT are set, a BREAK reads as  a
              NUL  character, except when PARMRK is set, in which
              case it reads as the sequence \377 \0 \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  (not in POSIX) Map uppercase characters  to  lower-
              case on input.

       IXON   Enable XON/XOFF flow control on output.

       IXANY  (not  in  POSIX.1;  XSI)  Enable  any  character to
              restart output.

       IXOFF  Enable XON/XOFF flow control on input.

       IMAXBEL
              (not in POSIX) Ring bell when input queue is  full.
              Linux  does  not implement this bit, and acts as if
              it is always set.

       c_oflag flag constants defined in POSIX.1:

       OPOST  Enable implementation-defined output processing.

       The remaining c_oflag flag constants are defined in  POSIX
       1003.1-2001, unless marked otherwise.

       OLCUC  (not  in  POSIX) Map lowercase characters to upper-
              case on output.

       ONLCR  (XSI) 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  (not  in POSIX) Fill character is ASCII DEL (0177).
              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 TAB3,  that  is,
              XTABS, expands tabs to spaces (with tab stops every
              eight columns).

       BSDLY  Backspace delay mask.  Values are BS0 or BS1.  (Has
              never been implemented.)

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

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

       c_cflag flag constants:

       CBAUD  (not in POSIX) Baud speed mask (4+1 bits).

       CBAUDEX
              (not  in  POSIX)  Extra  baud  speed  mask (1 bit),
              included in CBAUD.

       (POSIX says that the baud speed is stored in  the  termios
       structure without specifying where precisely, and provides
       cfgetispeed() and cfsetispeed() for getting  at  it.  Some
       systems  use bits selected by CBAUD in c_cflag, other sys-
       tems use separate fields, e.g.  sg_ispeed and  sg_ospeed.)

       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.

       LOBLK  (not in POSIX) Block output from a noncurrent shell
              layer.  (For use by shl.)

       CIBAUD (not  in  POSIX)  Mask for input speeds. The values
              for the CIBAUD bits are the same as the values  for
              the CBAUD bits, shifted left IBSHIFT bits.

       CRTSCTS
              (not  in POSIX) Enable RTS/CTS (hardware) flow con-
              trol.

       c_lflag flag constants:

       ISIG   When any of the characters  INTR,  QUIT,  SUSP,  or
              DSUSP are received, generate the corresponding sig-
              nal.

       ICANON Enable canonical mode.  This  enables  the  special
              characters  EOF,  EOL,  EOL2,  ERASE,  KILL, LNEXT,
              REPRINT, STATUS, and WERASE, and buffers by  lines.

       XCASE  (not in POSIX; not supported under Linux) If ICANON
              is also set, terminal is uppercase only.  Input  is
              converted  to lowercase, except for characters pre-
              ceded by \.  On output,  uppercase  characters  are
              preceded  by  \  and  lowercase characters are con-
              verted 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
              (not in POSIX) 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
              (not in POSIX) If ICANON and IECHO  are  also  set,
              characters are printed as they are being erased.

       ECHOKE (not  in  POSIX)  If  ICANON  is  also set, KILL is
              echoed by erasing each character on  the  line,  as
              specified by ECHOE and ECHOPRT.

       DEFECHO
              (not in POSIX) Echo only when a process is reading.

       FLUSHO (not in POSIX; not supported under Linux) Output is
              being  flushed.  This flag is toggled by typing the
              DISCARD character.

       NOFLSH Disable flushing the input and output  queues  when
              generating the SIGINT, SIGQUIT and SIGSUSP signals.

       TOSTOP Send the SIGTTOU signal to the process group  of  a
              background process which tries to write to its con-
              trolling terminal.

       PENDIN (not in POSIX; not supported under Linux) All char-
              acters  in  the  input queue are reprinted when the
              next character is read.   (bash  handles  typeahead
              this way.)

       IEXTEN Enable   implementation-defined  input  processing.
              This flag, as well as ICANON must  be  enabled  for
              the special characters EOL2, LNEXT, REPRINT, WERASE
              to be interpreted, and for the  IUCLC  flag  to  be
              effective.

       The  c_cc  array  defines  the special control characters.
       The symbolic indices (initial values) and meaning are:

       VINTR  (003, ETX,  Ctrl-C,  or  also  0177,  DEL,  rubout)
              Interrupt  character. Send a SIGINT signal.  Recog-
              nized when ISIG is set,  and  then  not  passed  as
              input.

       VQUIT  (034, FS, Ctrl-\) Quit character. Send SIGQUIT sig-
              nal.  Recognized when ISIG is  set,  and  then  not
              passed as input.

       VERASE (0177,  DEL, rubout, or 010, BS, Ctrl-H, or also #)
              Erase character. This erases the previous  not-yet-
              erased  character,  but  does not erase past EOF or
              beginning-of-line.  Recognized when ICANON is  set,
              and then not passed as input.

       VKILL  (025, NAK, Ctrl-U, or Ctrl-X, or also @) Kill char-
              acter. This erases the input since the last EOF  or
              beginning-of-line.   Recognized when ICANON is set,
              and then not passed as input.

       VEOF   (004, EOT,  Ctrl-D)  End-of-file  character.   More
              precisely:  this  character  causes the pending tty
              buffer to be sent to the waiting user program with-
              out  waiting  for  end-of-line.  If it is the first
              character of the line, the read() in the user  pro-
              gram  returns 0, which signifies end-of-file.  Rec-
              ognized when ICANON is set, and then not passed  as
              input.

       VMIN   Minimum  number  of  characters  for  non-canonical
              read.

       VEOL   (0, NUL) Additional end-of-line character.   Recog-
              nized when ICANON is set.

       VTIME  Timeout in deciseconds for non-canonical read.

       VEOL2  (not  in  POSIX;  0,  NUL)  Yet another end-of-line
              character.  Recognized when ICANON is set.

       VSWTCH (not in POSIX; not supported under Linux;  0,  NUL)
              Switch character. (Used by shl only.)

       VSTART (021, DC1, Ctrl-Q) Start character. Restarts output
              stopped by the  Stop  character.   Recognized  when
              IXON is set, and then not passed as input.

       VSTOP  (023,  DC3,  Ctrl-S)  Stop  character.  Stop output
              until Start character typed.  Recognized when  IXON
              is set, and then not passed as input.

       VSUSP  (032,  SUB, Ctrl-Z) Suspend character. Send SIGTSTP
              signal.  Recognized when ISIG is set, and then  not
              passed as input.

       VDSUSP (not  in POSIX; not supported under Linux; 031, EM,
              Ctrl-Y) Delayed  suspend  character:  send  SIGTSTP
              signal  when the character is read by the user pro-
              gram.  Recognized when IEXTEN and ISIG are set, and
              the  system  supports  job  control,  and  then not
              passed as input.

       VLNEXT (not in POSIX;  026,  SYN,  Ctrl-V)  Literal  next.
              Quotes  the next input character, depriving it of a
              possible special meaning.  Recognized  when  IEXTEN
              is set, and then not passed as input.

       VWERASE
              (not  in POSIX; 027, ETB, Ctrl-W) Word erase.  Rec-
              ognized when ICANON and IEXTEN are  set,  and  then
              not passed as input.

       VREPRINT
              (not  in  POSIX;  022,  DC2, Ctrl-R) Reprint unread
              characters.  Recognized when ICANON and IEXTEN  are
              set, and then not passed as input.

       VDISCARD
              (not  in POSIX; not supported under Linux; 017, SI,
              Ctrl-O) Toggle: start/stop discarding pending  out-
              put.   Recognized  when IEXTEN is set, and then not
              passed as input.

       VSTATUS
              (not in POSIX; not supported  under  Linux;  status
              request: 024, DC4, Ctrl-T).

       These  symbolic subscript values are all different, except
       that VTIME, VMIN may have the same value  as  VEOL,  VEOF,
       respectively.   (In non-canonical mode the special charac-
       ter meaning is replaced by the timeout meaning. MIN repre-
       sents  the  minimum  number  of  characters that should be
       received to satisfy the read. TIME is a  decisecond-valued
       timer.  When both are set, a read will wait until at least
       one character has been received, and then return  as  soon
       as  either  MIN characters have been received or time TIME
       has passed since the last character was received. If  only
       MIN is set, the read will not return before MIN characters
       have been received. If only TIME is  set,  the  read  will
       return  as  soon as either at least one character has been
       received, or the timer times out. If neither is  set,  the
       read  will  return  immediately, only giving the currently
       already available characters.)

       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 termi-
       nal (unless support is required from the underlying  hard-
       ware  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
              discarded before the change is made.

       tcsendbreak() transmits a continuous stream of zero-valued
       bits  for  a  specific  duration, if the terminal is using
       asynchronous serial data  transmission.   If  duration  is
       zero, it transmits zero-valued bits for at least 0.25 sec-
       onds, 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
              written 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  termi-
              nal device from transmitting data to the system.

       TCION  transmits  a START character, which starts the ter-
              minal 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 set-
       ting 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(l).

       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
       termios  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  connec-
       tion.   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
       termios 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 pro-
       cessing 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 VALUE
       cfgetispeed()  returns  the  input baud rate stored in the
       termios structure.

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

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

       All other functions return:

       0      on success.

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

       Note that  tcsetattr()  returns  success  if  any  of  the
       requested  changes  could  be  successfully  carried  out.
       Therefore, when making multiple changes it may  be  neces-
       sary  to  follow  this  call  with a further call to tcge-
       tattr() to check that all changes have been performed suc-
       cessfully.


NOTES
       Unix  V7  and  several  later  systems have a list of baud
       rates where after the fourteen values B0, ...,  B9600  one
       finds  the  two  constants  EXTA,  EXTB  ("External A" and
       "External B").  Many systems extend  the  list  with  much
       higher baud rates.

SEE ALSO
       stty(y), setserial(l)



Linux                       2001-12-17                 TERMIOS(S)