summaryrefslogtreecommitdiffstats
path: root/man3/termios.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/termios.3')
-rw-r--r--man3/termios.3635
1 files changed, 635 insertions, 0 deletions
diff --git a/man3/termios.3 b/man3/termios.3
new file mode 100644
index 000000000..c63ea166c
--- /dev/null
+++ b/man3/termios.3
@@ -0,0 +1,635 @@
+.\" Hey Emacs! This file is -*- nroff -*- source.
+.\"
+.\" Copyright (c) 1993 Michael Haardt
+.\" (michael@moria.de)
+.\" Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
+.\" Modified 1995-02-25 by Jim Van Zandt <jrv@vanzandt.mv.com>
+.\" Modified 1995-09-02 by Jim Van Zandt <jrv@vanzandt.mv.com>
+.\" moved to man3, aeb, 950919
+.\" Modified 2001-09-22 by Michael Kerrisk <mtk16@ext.canterbury.ac.nz>
+.\" Modified 2001-12-17, aeb
+.\" Modified 2004-10-31, aeb
+.\"
+.TH TERMIOS 3 2004-10-31 "Linux" "Linux Programmer's Manual"
+.SH NAME
+termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
+cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, cfsetspeed \-
+get and set terminal attributes, line control, get and set baud rate
+.SH SYNOPSIS
+.ad l
+.ft B
+#include <termios.h>
+.br
+#include <unistd.h>
+.sp
+.BI "int tcgetattr(int " fd ", struct termios *" termios_p );
+.sp
+.BI "int tcsetattr(int " fd ", int " optional_actions ", const struct termios *" termios_p );
+.sp
+.BI "int tcsendbreak(int " fd ", int " duration );
+.sp
+.BI "int tcdrain(int " fd );
+.sp
+.BI "int tcflush(int " fd ", int " queue_selector );
+.sp
+.BI "int tcflow(int " fd ", int " action );
+.sp
+.BI "void cfmakeraw(struct termios *" termios_p );
+.sp
+.BI "speed_t cfgetispeed(const struct termios *" termios_p );
+.sp
+.BI "speed_t cfgetospeed(const struct termios *" termios_p );
+.sp
+.BI "int cfsetispeed(struct termios *" termios_p ", speed_t " speed );
+.sp
+.BI "int cfsetospeed(struct termios *" termios_p ", speed_t " speed );
+.ft P
+.ad b
+.SH DESCRIPTION
+The termios functions describe a general terminal interface that is
+provided to control asynchronous communications ports.
+.LP
+Many of the functions described here have a \fItermios_p\fP argument
+that is a pointer to a \fBtermios\fP structure. This structure contains
+at least the following members:
+.ne 9
+.sp
+.RS
+.nf
+tcflag_t \fIc_iflag\fP; /* input modes */
+tcflag_t \fIc_oflag\fP; /* output modes */
+tcflag_t \fIc_cflag\fP; /* control modes */
+tcflag_t \fIc_lflag\fP; /* local modes */
+cc_t \fIc_cc\fP[\fBNCCS\fP]; /* control chars */
+.fi
+.RE
+.PP
+\fIc_iflag\fP flag constants:
+.TP
+.B IGNBRK
+Ignore BREAK condition on input.
+.TP
+.B BRKINT
+If \fBIGNBRK\fP is set, a BREAK is ignored. If it is not set
+but \fBBRKINT\fP 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
+\fBSIGINT\fP to be sent to this foreground process group.
+When neither \fBIGNBRK\fP nor \fBBRKINT\fP are set, a BREAK
+reads as a NUL character, except when \fBPARMRK\fP is set,
+in which case it reads as the sequence \\377 \\0 \\0.
+.TP
+.B IGNPAR
+Ignore framing errors and parity errors.
+.TP
+.B PARMRK
+If \fBIGNPAR\fP is not set, prefix a character with a parity error or
+framing error with \\377 \\0. If neither \fBIGNPAR\fP nor \fBPARMRK\fP
+is set, read a character with a parity error or framing error
+as \\0.
+.TP
+.B INPCK
+Enable input parity checking.
+.TP
+.B ISTRIP
+Strip off eighth bit.
+.TP
+.B INLCR
+Translate NL to CR on input.
+.TP
+.B IGNCR
+Ignore carriage return on input.
+.TP
+.B ICRNL
+Translate carriage return to newline on input (unless \fBIGNCR\fP is set).
+.TP
+.B IUCLC
+(not in POSIX) Map uppercase characters to lowercase on input.
+.TP
+.B IXON
+Enable XON/XOFF flow control on output.
+.TP
+.B IXANY
+(not in POSIX.1; XSI) Enable any character to restart output.
+.TP
+.B IXOFF
+Enable XON/XOFF flow control on input.
+.TP
+.B 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.
+.PP
+\fIc_oflag\fP flag constants defined in POSIX.1:
+.TP
+.B OPOST
+Enable implementation-defined output processing.
+.PP
+The remaining \fIc_oflag\fP flag constants are defined in POSIX 1003.1-2001,
+unless marked otherwise.
+.TP
+.B OLCUC
+(not in POSIX) Map lowercase characters to uppercase on output.
+.TP
+.B ONLCR
+(XSI) Map NL to CR-NL on output.
+.TP
+.B OCRNL
+Map CR to NL on output.
+.TP
+.B ONOCR
+Don't output CR at column 0.
+.TP
+.B ONLRET
+Don't output CR.
+.TP
+.B OFILL
+Send fill characters for a delay, rather than using a timed delay.
+.TP
+.B OFDEL
+(not in POSIX) Fill character is ASCII DEL (0177).
+If unset, fill character is ASCII NUL.
+.TP
+.B NLDLY
+Newline delay mask. Values are \fBNL0\fP and \fBNL1\fP.
+.TP
+.B CRDLY
+Carriage return delay mask.
+Values are \fBCR0\fP, \fBCR1\fP, \fBCR2\fP, or \fBCR3\fP.
+.TP
+.B TABDLY
+Horizontal tab delay mask.
+Values are \fBTAB0\fP, \fBTAB1\fP, \fBTAB2\fP, \fBTAB3\fP (or \fBXTABS\fP).
+A value of TAB3, that is, XTABS, expands tabs to spaces
+(with tab stops every eight columns).
+.TP
+.B BSDLY
+Backspace delay mask. Values are \fBBS0\fP or \fBBS1\fP.
+(Has never been implemented.)
+.TP
+.B VTDLY
+Vertical tab delay mask. Values are \fBVT0\fP or \fBVT1\fP.
+.TP
+.B FFDLY
+Form feed delay mask. Values are \fBFF0\fP or \fBFF1\fP.
+.PP
+\fIc_cflag\fP flag constants:
+.TP
+.B CBAUD
+(not in POSIX) Baud speed mask (4+1 bits).
+.TP
+.B CBAUDEX
+(not in POSIX) Extra baud speed mask (1 bit), included in CBAUD.
+.LP
+(POSIX says that the baud speed is stored in the termios structure
+without specifying where precisely, and provides
+.B cfgetispeed()
+and
+.B cfsetispeed()
+for getting at it. Some systems use bits selected by CBAUD in
+.IR c_cflag ,
+other systems use separate fields, e.g.
+.I sg_ispeed
+and
+.IR sg_ospeed .)
+.TP
+.B CSIZE
+Character size mask.
+Values are \fBCS5\fP, \fBCS6\fP, \fBCS7\fP, or \fBCS8\fP.
+.TP
+.B CSTOPB
+Set two stop bits, rather than one.
+.TP
+.B CREAD
+Enable receiver.
+.TP
+.B PARENB
+Enable parity generation on output and parity checking for input.
+.TP
+.B PARODD
+Parity for input and output is odd.
+.TP
+.B HUPCL
+Lower modem control lines after last process closes the device (hang up).
+.TP
+.B CLOCAL
+Ignore modem control lines.
+.TP
+.B LOBLK
+(not in POSIX) Block output from a noncurrent shell layer.
+(For use by \fBshl\fP.)
+.TP
+.B 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.
+.TP
+.B CRTSCTS
+(not in POSIX) Enable RTS/CTS (hardware) flow control.
+.PP
+\fIc_lflag\fP flag constants:
+.TP
+.B ISIG
+When any of the characters INTR, QUIT, SUSP, or DSUSP are received,
+generate the corresponding signal.
+.TP
+.B ICANON
+Enable canonical mode. This enables the special characters
+EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT, STATUS, and WERASE, and
+buffers by lines.
+.TP
+.B XCASE
+(not in POSIX; not supported under Linux)
+If \fBICANON\fP 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.
+.TP
+.B ECHO
+Echo input characters.
+.TP
+.B ECHOE
+If \fBICANON\fP is also set, the ERASE character erases the preceding
+input character, and WERASE erases the preceding word.
+.TP
+.B ECHOK
+If \fBICANON\fP is also set, the KILL character erases the current line.
+.TP
+.B ECHONL
+If \fBICANON\fP is also set, echo the NL character even if ECHO is not set.
+.TP
+.B ECHOCTL
+(not in POSIX) If \fBECHO\fP 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.
+.TP
+.B ECHOPRT
+(not in POSIX) If \fBICANON\fP and \fBIECHO\fP are also set, characters
+are printed as they are being erased.
+.TP
+.B ECHOKE
+(not in POSIX) If \fBICANON\fP is also set, KILL is echoed by erasing
+each character on the line, as specified by \fBECHOE\fP and \fBECHOPRT\fP.
+.TP
+.B DEFECHO
+(not in POSIX) Echo only when a process is reading.
+.TP
+.B FLUSHO
+(not in POSIX; not supported under Linux)
+Output is being flushed. This flag is toggled by typing
+the DISCARD character.
+.TP
+.B NOFLSH
+Disable flushing the input and output queues when generating the SIGINT,
+SIGQUIT and SIGSUSP signals.
+.\" Stevens lets SIGSUSP only flush the input queue
+.TP
+.B TOSTOP
+Send the SIGTTOU signal to the process group of a background process
+which tries to write to its controlling terminal.
+.TP
+.B PENDIN
+(not in POSIX; not supported under Linux)
+All characters in the input queue are reprinted when
+the next character is read. (\fBbash\fP handles typeahead this way.)
+.TP
+.B IEXTEN
+Enable implementation-defined input processing.
+This flag, as well as \fBICANON\fP must be enabled for the
+special characters EOL2, LNEXT, REPRINT, WERASE to be interpreted,
+and for the \fBIUCLC\fP flag to be effective.
+.PP
+The \fIc_cc\fP array defines the special control characters.
+The symbolic indices (initial values) and meaning are:
+.TP
+.B VINTR
+(003, ETX, Ctrl-C, or also 0177, DEL, rubout)
+Interrupt character. Send a SIGINT signal.
+Recognized when ISIG is set, and then not passed as input.
+.TP
+.B VQUIT
+(034, FS, Ctrl-\e)
+Quit character. Send SIGQUIT signal.
+Recognized when ISIG is set, and then not passed as input.
+.TP
+.B 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.
+.TP
+.B VKILL
+(025, NAK, Ctrl-U, or Ctrl-X, or also @)
+Kill character. This erases the input since the last EOF or beginning-of-line.
+Recognized when ICANON is set, and then not passed as input.
+.TP
+.B 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 without waiting for end-of-line.
+If it is the first character of the line, the \fIread()\fP in the
+user program returns 0, which signifies end-of-file.
+Recognized when ICANON is set, and then not passed as input.
+.TP
+.B VMIN
+Minimum number of characters for non-canonical read.
+.TP
+.B VEOL
+(0, NUL)
+Additional end-of-line character.
+Recognized when ICANON is set.
+.TP
+.B VTIME
+Timeout in deciseconds for non-canonical read.
+.TP
+.B VEOL2
+(not in POSIX; 0, NUL)
+Yet another end-of-line character.
+Recognized when ICANON is set.
+.TP
+.B VSWTCH
+(not in POSIX; not supported under Linux; 0, NUL)
+Switch character. (Used by \fBshl\fP only.)
+.TP
+.B 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.
+.TP
+.B VSTOP
+(023, DC3, Ctrl-S)
+Stop character. Stop output until Start character typed.
+Recognized when IXON is set, and then not passed as input.
+.TP
+.B VSUSP
+(032, SUB, Ctrl-Z)
+Suspend character. Send SIGTSTP signal.
+Recognized when ISIG is set, and then not passed as input.
+.TP
+.B 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 program.
+Recognized when IEXTEN and ISIG are set, and the system supports
+job control, and then not passed as input.
+.TP
+.B 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.
+.TP
+.B VWERASE
+(not in POSIX; 027, ETB, Ctrl-W)
+Word erase.
+Recognized when ICANON and IEXTEN are set, and then not passed as input.
+.TP
+.B VREPRINT
+(not in POSIX; 022, DC2, Ctrl-R)
+Reprint unread characters.
+Recognized when ICANON and IEXTEN are set, and then not passed as input.
+.TP
+.B 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.
+.TP
+.B VSTATUS
+(not in POSIX; not supported under Linux;
+status request: 024, DC4, Ctrl-T).
+.LP
+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 character meaning is replaced
+by the timeout meaning. MIN represents 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.)
+.PP
+.B tcgetattr()
+gets the parameters associated with the object referred by \fIfd\fP and
+stores them in the \fBtermios\fP structure referenced by
+\fItermios_p\fP. This function may be invoked from a background process;
+however, the terminal attributes may be subsequently changed by a
+foreground process.
+.LP
+.B tcsetattr()
+sets the parameters associated with the terminal (unless support is
+required from the underlying hardware that is not available) from the
+\fBtermios\fP structure referred to by \fItermios_p\fP.
+\fIoptional_actions\fP specifies when the changes take effect:
+.IP \fBTCSANOW\fP
+the change occurs immediately.
+.IP \fBTCSADRAIN\fP
+the change occurs after all output written to
+.I fd
+has been transmitted. This function should be used when changing
+parameters that affect output.
+.IP \fBTCSAFLUSH\fP
+the change occurs after all output written to the object referred by
+.I fd
+has been transmitted, and all input that has been received but not read
+will be discarded before the change is made.
+.LP
+.B tcsendbreak()
+transmits a continuous stream of zero-valued bits for a specific
+duration, if the terminal is using asynchronous serial data
+transmission. If \fIduration\fP is zero, it transmits zero-valued bits
+for at least 0.25 seconds, and not more that 0.5 seconds. If
+\fIduration\fP is not zero, it sends zero-valued bits for some
+implementation-defined length of time.
+.LP
+If the terminal is not using asynchronous serial data transmission,
+\fBtcsendbreak()\fP returns without taking any action.
+.LP
+.B tcdrain()
+waits until all output written to the object referred to by
+.I fd
+has been transmitted.
+.LP
+.B tcflush()
+discards data written to the object referred to by
+.I fd
+but not transmitted, or data received but not read, depending on the
+value of
+.IR queue_selector :
+.IP \fBTCIFLUSH\fP
+flushes data received but not read.
+.IP \fBTCOFLUSH\fP
+flushes data written but not transmitted.
+.IP \fBTCIOFLUSH\fP
+flushes both data received but not read, and data written but not
+transmitted.
+.LP
+.B tcflow()
+suspends transmission or reception of data on the object referred to by
+.IR fd ,
+depending on the value of
+.IR action :
+.IP \fBTCOOFF\fP
+suspends output.
+.IP \fBTCOON\fP
+restarts suspended output.
+.IP \fBTCIOFF\fP
+transmits a STOP character, which stops the terminal device from transmitting data to the
+system.
+.IP \fBTCION\fP
+transmits a START character, which starts the terminal device transmitting data to the
+system.
+.LP
+The default on open of a terminal file is that neither its input nor its
+output is suspended.
+.LP
+The baud rate functions are provided for getting and setting the values
+of the input and output baud rates in the \fBtermios\fP structure. The
+new values do not take effect
+until \fBtcsetattr()\fP is successfully called.
+
+Setting the speed to \fBB0\fP instructs the modem to "hang up".
+The actual bit rate corresponding to \fBB38400\fP may be altered with
+\fBsetserial\fP(8).
+.LP
+The input and output baud rates are stored in the \fBtermios\fP
+structure.
+.LP
+\fBcfmakeraw\fP sets the terminal attributes as follows:
+.nf
+ 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;
+.fi
+.LP
+.B cfgetospeed()
+returns the output baud rate stored in the \fBtermios\fP structure
+pointed to by
+.IR termios_p .
+.LP
+.B cfsetospeed()
+sets the output baud rate stored in the \fBtermios\fP structure pointed
+to by \fItermios_p\fP to \fIspeed\fP, which must be one of these constants:
+.nf
+.ft B
+ B0
+ B50
+ B75
+ B110
+ B134
+ B150
+ B200
+ B300
+ B600
+ B1200
+ B1800
+ B2400
+ B4800
+ B9600
+ B19200
+ B38400
+ B57600
+ B115200
+ B230400
+.ft P
+.fi
+The zero baud rate, \fBB0\fP,
+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. \fBCBAUDEX\fP is a mask
+for the speeds beyond those defined in POSIX.1 (57600 and above).
+Thus, \fBB57600\fP & \fBCBAUDEX\fP is nonzero.
+.LP
+.B cfgetispeed()
+returns the input baud rate stored in the \fBtermios\fP structure.
+.LP
+.B cfsetispeed()
+sets the input baud rate stored in the \fBtermios\fP structure to
+.IR speed .
+If the input baud rate is set to zero, the input baud rate will be
+equal to the output baud rate.
+.LP
+.B cfsetspeed()
+is a 4.4 BSD extension. It will set both input and output speed.
+.SH "RETURN VALUE"
+.LP
+.B cfgetispeed()
+returns the input baud rate stored in the
+\fBtermios\fP
+structure.
+.LP
+.B cfgetospeed()
+returns the output baud rate stored in the \fBtermios\fP structure.
+.LP
+All other functions return:
+.IP 0
+on success.
+.IP \-1
+on failure and set
+.I errno
+to indicate the error.
+.LP
+Note that
+.BI tcsetattr()
+returns success if \fIany\fP of the requested changes could be
+successfully carried out. Therefore, when making multiple changes
+it may be necessary to follow this call with a further call to
+.BI tcgetattr()
+to check that all changes have been performed successfully.
+
+.SH 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.
+.LP
+The effect of a nonzero \fIduration\fP with \fBtcsendbreak\fP varies.
+SunOS specifies a break of
+.IB duration * N
+seconds, where \fIN\fP is at least 0.25, and not more than 0.5.
+Linux, AIX, DU, Tru64 send a break of
+.I duration
+milliseconds.
+FreeBSD and NetBSD and HP-UX and MacOS ignore the value of
+.IR duration .
+Under Solaris and Unixware,
+.B tcsendbreak
+with nonzero
+.I duration
+behaves like
+.BR tcdrain .
+.\" libc4 until 4.7.5, glibc for sysv: EINVAL for duration > 0.
+.\" libc4.7.6, libc5, glibc for unix: duration in ms.
+.\" glibc for bsd: duration in us
+.\" glibc for sunos4: ignore duration
+.SH "SEE ALSO"
+.BR stty (1),
+.BR setserial (8)