termios(3type) — Linux manual page

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | STANDARDS | HISTORY | BUGS | SEE ALSO | COLOPHON

termios(3type)                                             termios(3type)

NAME         top

       termios - terminal input/output settings

LIBRARY         top

       Standard C library (libc)

SYNOPSIS         top

       #include <termios.h>

       struct termios {
            // At least these members, in no particular order
            tcflag_t  c_iflag;
            tcflag_t  c_oflag;
            tcflag_t  c_cflag;
            tcflag_t  c_lflag;
            cc_t      c_cc[NCCS];
       };

DESCRIPTION         top

       .c_iflag
              Input modes.

       .c_oflag
              Output modes.

       .c_cflag
              Control modes.

       .c_lflag
              Local modes.

       .c_cc  Special characters.

       The values that may be assigned to these fields are described
       below.  In the case of the first four bit-mask fields, the
       definitions of some of the associated flags that may be set are
       exposed only if a specific feature test macro (see
       feature_test_macros(7)) is defined, as noted in brackets ("[]").

       In the descriptions below, "not in POSIX" means that the value is
       not specified in POSIX.1-2001, and "XSI" means that the value is
       specified in POSIX.1-2001 as part of the XSI extension.

       The below symbolic subscript values are all different, except that
       VTIME, VMIN may have the same value as VEOL, VEOF, respectively.
       In noncanonical mode, the special character meaning is replaced by
       the timeout meaning.  For an explanation of VMIN and VTIME, see
       the description of noncanonical mode below.

   .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 foreground process group, it will
              cause a SIGINT to be sent to this foreground process group.
              When neither IGNBRK nor BRKINT are set, a BREAK reads as a
              null byte ('\0'), 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 this bit is set, input bytes with parity or framing
              errors are marked when passed to the program.  This bit is
              meaningful only when INPCK is set and IGNPAR is not set.
              The way erroneous bytes are marked is with two preceding
              bytes, \377 and \0.  Thus, the program actually reads three
              bytes for one erroneous byte received from the terminal.
              If a valid byte has the value \377, and ISTRIP (see below)
              is not set, the program might confuse it with the prefix
              that marks a parity error.  Therefore, a valid byte \377 is
              passed to the program as two bytes, \377 \377, in this
              case.

              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 lowercase on
              input.

       IXON   Enable XON/XOFF flow control on output.

       IXANY  (XSI) Typing any character will restart stopped output.
              (The default is to allow just the START 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.

       IUTF8 (since Linux 2.6.4)
              (not in POSIX) Input is UTF8; this allows character-erase
              to be correctly performed in cooked mode.

   .c_oflag flag constants
       OPOST  Enable implementation-defined output processing.

       OLCUC  (not in POSIX) Map lowercase characters to uppercase 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 The NL character is assumed to do the carriage-return
              function; the kernel's idea of the current column is set to
              0 after both NL and CR.

       OFILL  Send fill characters for a delay, rather than using a timed
              delay.

       OFDEL  Fill character is ASCII DEL (0177).  If unset, fill
              character is ASCII NUL ('\0').  (Not implemented on Linux.)

       NLDLY  Newline delay mask.  Values are NL0 and NL1.  [requires
              _BSD_SOURCE or _SVID_SOURCE or _XOPEN_SOURCE]

       CRDLY  Carriage return delay mask.  Values are CR0, CR1, CR2, or
              CR3.  [requires _BSD_SOURCE or _SVID_SOURCE or
              _XOPEN_SOURCE]

       TABDLY Horizontal tab delay mask.  Values are TAB0, TAB1, TAB2,
              TAB3 (or XTABS, but see the BUGS section).  A value of
              TAB3, that is, XTABS, expands tabs to spaces (with tab
              stops every eight columns).  [requires _BSD_SOURCE or
              _SVID_SOURCE or _XOPEN_SOURCE]

       BSDLY  Backspace delay mask.  Values are BS0 or BS1.  (Has never
              been implemented.)  [requires _BSD_SOURCE or _SVID_SOURCE
              or _XOPEN_SOURCE]

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

       FFDLY  Form feed delay mask.  Values are FF0 or FF1.  [requires
              _BSD_SOURCE or _SVID_SOURCE or _XOPEN_SOURCE]

   .c_cflag flag constants
       CBAUD  (not in POSIX) Baud speed mask (4+1 bits).  [requires
              _BSD_SOURCE or _SVID_SOURCE]

       CBAUDEX
              (not in POSIX) Extra baud speed mask (1 bit), included in
              CBAUD.  [requires _BSD_SOURCE or _SVID_SOURCE]

              (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
              systems use separate fields, for example, 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 If set, then parity for input and output is odd; otherwise
              even parity is used.

       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 (shell layers).  (Not implemented on Linux.)

       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.  [requires _BSD_SOURCE or
              _SVID_SOURCE] (Not implemented in glibc, supported on Linux
              via TCGET* and TCSET* ioctls; see ioctl_tty(2))

       CMSPAR (not in POSIX) Use "stick" (mark/space) parity (supported
              on certain serial devices): if PARODD is set, the parity
              bit is always 1; if PARODD is not set, then the parity bit
              is always 0.  [requires _BSD_SOURCE or _SVID_SOURCE]

       CRTSCTS
              (not in POSIX) Enable RTS/CTS (hardware) flow control.
              [requires _BSD_SOURCE or _SVID_SOURCE]

   .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 (described below).

       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 preceded by \.  On output,
              uppercase characters are preceded by \ and lowercase
              characters are converted to uppercase.  [requires
              _BSD_SOURCE or _SVID_SOURCE or _XOPEN_SOURCE]

       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, terminal special
              characters other than TAB, NL, START, and STOP are echoed
              as ^X, where X is the character with ASCII code 0x40
              greater than the special character.  For example, character
              0x08 (BS) is echoed as ^H.  [requires _BSD_SOURCE or
              _SVID_SOURCE]

       ECHOPRT
              (not in POSIX) If ICANON and ECHO are also set, characters
              are printed as they are being erased.  [requires
              _BSD_SOURCE or _SVID_SOURCE]

       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.  [requires _BSD_SOURCE or _SVID_SOURCE]

       DEFECHO
              (not in POSIX) Echo only when a process is reading.  (Not
              implemented on Linux.)

       FLUSHO (not in POSIX; not supported under Linux) Output is being
              flushed.  This flag is toggled by typing the DISCARD
              character.  [requires _BSD_SOURCE or _SVID_SOURCE]

       NOFLSH Disable flushing the input and output queues when
              generating signals for the INT, QUIT, and SUSP characters.

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

       PENDIN (not in POSIX; not supported under Linux) All characters in
              the input queue are reprinted when the next character is
              read.  (bash(1) handles typeahead this way.)  [requires
              _BSD_SOURCE or _SVID_SOURCE]

       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.

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

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

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

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

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

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

       VERASE (0177, DEL, rubout, or 010, BS, Ctrl-H, or also #) Erase
              character (ERASE).  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.

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

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

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

       VMIN   Minimum number of characters for noncanonical read (MIN).

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

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

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

       VSTATUS
              (not in POSIX; not supported under Linux; status request:
              024, DC4, Ctrl-T).  Status character (STATUS).  Display
              status information at terminal, including state of
              foreground process and amount of CPU time it has consumed.
              Also sends a SIGINFO signal (not supported on Linux) to the
              foreground process group.

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

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

       VSWTCH (not in POSIX; not supported under Linux; 0, NUL) Switch
              character (SWTCH).  Used in System V to switch shells in
              shell layers, a predecessor to shell job control.

       VTIME  Timeout in deciseconds for noncanonical read (TIME).

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

       An individual terminal special character can be disabled by
       setting the value of the corresponding .c_cc element to
       _POSIX_VDISABLE.

   Canonical and noncanonical mode
       The setting of the ICANON canon flag in .c_lflag determines
       whether the terminal is operating in canonical mode (ICANON set)
       or noncanonical mode (ICANON unset).  By default, ICANON is set.

       In canonical mode:

       •  Input is made available line by line.  An input line is
          available when one of the line delimiters is typed (NL, EOL,
          EOL2; or EOF at the start of line).  Except in the case of EOF,
          the line delimiter is included in the buffer returned by
          read(2).

       •  Line editing is enabled (ERASE, KILL; and if the IEXTEN flag is
          set: WERASE, REPRINT, LNEXT).  A read(2) returns at most one
          line of input; if the read(2) requested fewer bytes than are
          available in the current line of input, then only as many bytes
          as requested are read, and the remaining characters will be
          available for a future read(2).

       •  The maximum line length is 4096 chars (including the
          terminating newline character); lines longer than 4096 chars
          are truncated.  After 4095 characters, input processing (e.g.,
          ISIG and ECHO* processing) continues, but any input data after
          4095 characters up to (but not including) any terminating
          newline is discarded.  This ensures that the terminal can
          always receive more input until at least one line can be read.

       In noncanonical mode input is available immediately (without the
       user having to type a line-delimiter character), no input
       processing is performed, and line editing is disabled.  The read
       buffer will only accept 4095 chars; this provides the necessary
       space for a newline char if the input mode is switched to
       canonical.  The settings of MIN (.c_cc[VMIN]) and TIME
       (.c_cc[VTIME]) determine the circumstances in which a read(2)
       completes; there are four distinct cases:

       MIN == 0, TIME == 0 (polling read)
              If data is available, read(2) returns immediately, with the
              lesser of the number of bytes available, or the number of
              bytes requested.  If no data is available, read(2) returns
              0.

       MIN > 0, TIME == 0 (blocking read)
              read(2) blocks until MIN bytes are available, and returns
              up to the number of bytes requested.

       MIN == 0, TIME > 0 (read with timeout)
              TIME specifies the limit for a timer in tenths of a second.
              The timer is started when read(2) is called.  read(2)
              returns either when at least one byte of data is available,
              or when the timer expires.  If the timer expires without
              any input becoming available, read(2) returns 0.  If data
              is already available at the time of the call to read(2),
              the call behaves as though the data was received
              immediately after the call.

       MIN > 0, TIME > 0 (read with interbyte timeout)
              TIME specifies the limit for a timer in tenths of a second.
              Once an initial byte of input becomes available, the timer
              is restarted after each further byte is received.  read(2)
              returns when any of the following conditions is met:

              •  MIN bytes have been received.

              •  The interbyte timer expires.

              •  The number of bytes requested by read(2) has been
                 received.  (POSIX does not specify this termination
                 condition, and on some other implementations read(2)
                 does not return in this case.)

              Because the timer is started only after the initial byte
              becomes available, at least one byte will be read.  If data
              is already available at the time of the call to read(2),
              the call behaves as though the data was received
              immediately after the call.

       POSIX does not specify whether the setting of the O_NONBLOCK file
       status flag takes precedence over the MIN and TIME settings.  If
       O_NONBLOCK is set, a read(2) in noncanonical mode may return
       immediately, regardless of the setting of MIN or TIME.
       Furthermore, if no data is available, POSIX permits a read(2) in
       noncanonical mode to return either 0, or -1 with errno set to
       EAGAIN.

STANDARDS         top

       POSIX.1-2024.

HISTORY         top

       POSIX.1-2001.

BUGS         top

       On the Alpha architecture before Linux 4.16 (and glibc before
       glibc 2.28), the XTABS value was different from TAB3 and it was
       ignored by the N_TTY line discipline code of the terminal driver
       as a result (because as it wasn't part of the TABDLY mask).

SEE ALSO         top

       cc_t(3type), tcflag_t(3type), termios(7)

COLOPHON         top

       This page is part of the man-pages (Linux kernel and C library
       user-space interface documentation) project.  Information about
       the project can be found at 
       ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report
       for this manual page, see
       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.
       This page was obtained from the tarball man-pages-6.19.tar.gz
       fetched from
       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on
       2026-09-09.  If you discover any rendering problems in this HTML
       version of the page, or you believe there is a better or more up-
       to-date source for the page, or you have corrections or
       improvements to the information in this COLOPHON (which is not
       part of the original manual page), send a mail to
       man-pages@man7.org

Linux man-pages 6.19            2026-07-02                 termios(3type)

Pages that refer to this page: setpgid(2)cc_t(3type)cfmakeraw(3)cfsetspeed(3)getpass(3)tcsetattr(3)credentials(7)termios(7)