]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man3/termios.3
termios.3: Add names of terminal special characters
[thirdparty/man-pages.git] / man3 / termios.3
CommitLineData
fea681da
MK
1.\" Hey Emacs! This file is -*- nroff -*- source.
2.\"
3.\" Copyright (c) 1993 Michael Haardt
4.\" (michael@moria.de)
5.\" Fri Apr 2 11:32:09 MET DST 1993
6.\"
7.\" This is free documentation; you can redistribute it and/or
8.\" modify it under the terms of the GNU General Public License as
9.\" published by the Free Software Foundation; either version 2 of
10.\" the License, or (at your option) any later version.
11.\"
12.\" The GNU General Public License's references to "object code"
13.\" and "executables" are to be interpreted as the output of any
14.\" document formatting or typesetting system, including
15.\" intermediate and printed output.
16.\"
17.\" This manual is distributed in the hope that it will be useful,
18.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
19.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20.\" GNU General Public License for more details.
21.\"
22.\" You should have received a copy of the GNU General Public
23.\" License along with this manual; if not, write to the Free
24.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
25.\" USA.
26.\"
27.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
28.\" Modified 1995-02-25 by Jim Van Zandt <jrv@vanzandt.mv.com>
29.\" Modified 1995-09-02 by Jim Van Zandt <jrv@vanzandt.mv.com>
30.\" moved to man3, aeb, 950919
c11b1abf 31.\" Modified 2001-09-22 by Michael Kerrisk <mtk.manpages@gmail.com>
fea681da
MK
32.\" Modified 2001-12-17, aeb
33.\" Modified 2004-10-31, aeb
19ab0376
MK
34.\" 2006-12-28, mtk:
35.\" Added .SS headers to give some structure to this page; and a
36.\" small amount of reordering.
a6712802 37.\" Added a section on canonical and noncanonical mode.
19ab0376
MK
38.\" Enhanced the discussion of "raw" mode for cfmakeraw().
39.\" Document CMSPAR.
fea681da 40.\"
d51529b8 41.TH TERMIOS 3 2011-09-08 "Linux" "Linux Programmer's Manual"
fea681da
MK
42.SH NAME
43termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
44cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, cfsetspeed \-
45get and set terminal attributes, line control, get and set baud rate
46.SH SYNOPSIS
04bb6cc0 47.nf
c91e381d 48.B #include <termios.h>
fea681da 49.br
c91e381d 50.B #include <unistd.h>
fea681da
MK
51.sp
52.BI "int tcgetattr(int " fd ", struct termios *" termios_p );
53.sp
04bb6cc0
MK
54.BI "int tcsetattr(int " fd ", int " optional_actions ,
55.BI " const struct termios *" termios_p );
fea681da
MK
56.sp
57.BI "int tcsendbreak(int " fd ", int " duration );
58.sp
59.BI "int tcdrain(int " fd );
60.sp
61.BI "int tcflush(int " fd ", int " queue_selector );
62.sp
63.BI "int tcflow(int " fd ", int " action );
64.sp
65.BI "void cfmakeraw(struct termios *" termios_p );
66.sp
67.BI "speed_t cfgetispeed(const struct termios *" termios_p );
68.sp
69.BI "speed_t cfgetospeed(const struct termios *" termios_p );
70.sp
71.BI "int cfsetispeed(struct termios *" termios_p ", speed_t " speed );
72.sp
73.BI "int cfsetospeed(struct termios *" termios_p ", speed_t " speed );
01d5d366 74.sp
52dab97a 75.BI "int cfsetspeed(struct termios *" termios_p ", speed_t " speed );
04bb6cc0 76.fi
cc4615cc
MK
77.sp
78.in -4n
79Feature Test Macro Requirements for glibc (see
80.BR feature_test_macros (7)):
81.in
82.sp
cc4615cc
MK
83.BR cfsetspeed (),
84.BR cfmakeraw ():
85_BSD_SOURCE
fea681da
MK
86.SH DESCRIPTION
87The termios functions describe a general terminal interface that is
88provided to control asynchronous communications ports.
87d1fd87 89.SS "The termios structure"
fea681da
MK
90.LP
91Many of the functions described here have a \fItermios_p\fP argument
c13182ef
MK
92that is a pointer to a \fItermios\fP structure.
93This structure contains at least the following members:
fea681da 94.sp
a6e2f128 95.in +4n
fea681da 96.nf
bd9b2a9c
MK
97tcflag_t c_iflag; /* input modes */
98tcflag_t c_oflag; /* output modes */
99tcflag_t c_cflag; /* control modes */
100tcflag_t c_lflag; /* local modes */
d8b24e6e 101cc_t c_cc[NCCS]; /* special characters */
fea681da 102.fi
a6e2f128 103.in
fea681da 104.PP
869ebe5b 105The values that may be assigned to these fields are described below.
c13182ef
MK
106In the case of the first four bit-mask fields,
107the definitions of some of the associated flags that may be set are
869ebe5b 108only exposed if a specific feature test macro (see
a8e7c990 109.BR feature_test_macros (7))
869ebe5b
MK
110is defined, as noted in brackets ("[]").
111.PP
42b09930 112In the descriptions below, "not in POSIX" means that the
c13182ef
MK
113value is not specified in POSIX.1-2001,
114and "XSI" means that the value is specified in POSIX.1-2001
42b09930
MK
115as part of the XSI extension.
116.PP
fea681da
MK
117\fIc_iflag\fP flag constants:
118.TP
119.B IGNBRK
120Ignore BREAK condition on input.
121.TP
122.B BRKINT
c13182ef
MK
123If \fBIGNBRK\fP is set, a BREAK is ignored.
124If it is not set
fea681da
MK
125but \fBBRKINT\fP is set, then a BREAK causes the input and output
126queues to be flushed, and if the terminal is the controlling
127terminal of a foreground process group, it will cause a
128\fBSIGINT\fP to be sent to this foreground process group.
129When neither \fBIGNBRK\fP nor \fBBRKINT\fP are set, a BREAK
f81fb444 130reads as a null byte (\(aq\\0\(aq), except when \fBPARMRK\fP is set,
fea681da
MK
131in which case it reads as the sequence \\377 \\0 \\0.
132.TP
133.B IGNPAR
134Ignore framing errors and parity errors.
135.TP
136.B PARMRK
c13182ef
MK
137If \fBIGNPAR\fP is not set, prefix a character with a parity error or
138framing error with \\377 \\0.
139If neither \fBIGNPAR\fP nor \fBPARMRK\fP
fea681da
MK
140is set, read a character with a parity error or framing error
141as \\0.
142.TP
143.B INPCK
144Enable input parity checking.
145.TP
146.B ISTRIP
147Strip off eighth bit.
148.TP
149.B INLCR
150Translate NL to CR on input.
151.TP
152.B IGNCR
153Ignore carriage return on input.
154.TP
155.B ICRNL
156Translate carriage return to newline on input (unless \fBIGNCR\fP is set).
157.TP
158.B IUCLC
159(not in POSIX) Map uppercase characters to lowercase on input.
160.TP
161.B IXON
162Enable XON/XOFF flow control on output.
163.TP
164.B IXANY
c13182ef 165(XSI) Typing any character will restart stopped output.
42b09930 166(The default is to allow just the START character to restart output.)
fea681da
MK
167.TP
168.B IXOFF
169Enable XON/XOFF flow control on input.
170.TP
171.B IMAXBEL
172(not in POSIX) Ring bell when input queue is full.
173Linux does not implement this bit, and acts as if it is always set.
225c76e9
MK
174.TP
175.BR IUTF8 " (since Linux 2.6.4)"
c13182ef 176(not in POSIX) Input is UTF8;
225c76e9 177this allows character-erase to be correctly performed in cooked mode.
fea681da
MK
178.PP
179\fIc_oflag\fP flag constants defined in POSIX.1:
180.TP
181.B OPOST
182Enable implementation-defined output processing.
183.PP
68e1685c 184The remaining \fIc_oflag\fP flag constants are defined in POSIX.1-2001,
fea681da
MK
185unless marked otherwise.
186.TP
187.B OLCUC
188(not in POSIX) Map lowercase characters to uppercase on output.
189.TP
190.B ONLCR
191(XSI) Map NL to CR-NL on output.
192.TP
193.B OCRNL
194Map CR to NL on output.
195.TP
196.B ONOCR
197Don't output CR at column 0.
198.TP
199.B ONLRET
200Don't output CR.
201.TP
202.B OFILL
203Send fill characters for a delay, rather than using a timed delay.
204.TP
205.B OFDEL
206(not in POSIX) Fill character is ASCII DEL (0177).
f81fb444 207If unset, fill character is ASCII NUL (\(aq\\0\(aq).
42b09930 208(Not implemented on Linux.)
fea681da
MK
209.TP
210.B NLDLY
c13182ef
MK
211Newline delay mask.
212Values are \fBNL0\fP and \fBNL1\fP.
db4e96b7
MK
213[requires
214.B _BSD_SOURCE
215or
216.B _SVID_SOURCE
c90511a6
MK
217or
218.BR _XOPEN_SOURCE ]
fea681da
MK
219.TP
220.B CRDLY
221Carriage return delay mask.
222Values are \fBCR0\fP, \fBCR1\fP, \fBCR2\fP, or \fBCR3\fP.
db4e96b7
MK
223[requires
224.B _BSD_SOURCE
225or
226.B _SVID_SOURCE
c90511a6
MK
227or
228.BR _XOPEN_SOURCE ]
fea681da
MK
229.TP
230.B TABDLY
231Horizontal tab delay mask.
232Values are \fBTAB0\fP, \fBTAB1\fP, \fBTAB2\fP, \fBTAB3\fP (or \fBXTABS\fP).
233A value of TAB3, that is, XTABS, expands tabs to spaces
234(with tab stops every eight columns).
db4e96b7
MK
235[requires
236.B _BSD_SOURCE
237or
238.B _SVID_SOURCE
c90511a6
MK
239or
240.BR _XOPEN_SOURCE ]
fea681da
MK
241.TP
242.B BSDLY
c13182ef
MK
243Backspace delay mask.
244Values are \fBBS0\fP or \fBBS1\fP.
fea681da 245(Has never been implemented.)
db4e96b7
MK
246[requires
247.B _BSD_SOURCE
248or
249.B _SVID_SOURCE
c90511a6
MK
250or
251.BR _XOPEN_SOURCE ]
fea681da
MK
252.TP
253.B VTDLY
c13182ef
MK
254Vertical tab delay mask.
255Values are \fBVT0\fP or \fBVT1\fP.
fea681da
MK
256.TP
257.B FFDLY
c13182ef
MK
258Form feed delay mask.
259Values are \fBFF0\fP or \fBFF1\fP.
db4e96b7
MK
260[requires
261.B _BSD_SOURCE
262or
263.B _SVID_SOURCE
c90511a6
MK
264or
265.BR _XOPEN_SOURCE ]
fea681da
MK
266.PP
267\fIc_cflag\fP flag constants:
268.TP
269.B CBAUD
270(not in POSIX) Baud speed mask (4+1 bits).
db4e96b7
MK
271[requires
272.B _BSD_SOURCE
c90511a6
MK
273or
274.BR _SVID_SOURCE ]
fea681da
MK
275.TP
276.B CBAUDEX
097585ed
MK
277(not in POSIX) Extra baud speed mask (1 bit), included in
278.BR CBAUD .
db4e96b7
MK
279[requires
280.B _BSD_SOURCE
c90511a6
MK
281or
282.BR _SVID_SOURCE ]
42b09930 283.sp
c13182ef
MK
284(POSIX says that the baud speed is stored in the
285.I termios
42b09930 286structure without specifying where precisely, and provides
63aa9df0 287.BR cfgetispeed ()
fea681da 288and
63aa9df0 289.BR cfsetispeed ()
c13182ef 290for getting at it.
097585ed
MK
291Some systems use bits selected by
292.B CBAUD
293in
fea681da 294.IR c_cflag ,
75b94dc3 295other systems use separate fields, for example,
fea681da
MK
296.I sg_ispeed
297and
298.IR sg_ospeed .)
299.TP
300.B CSIZE
301Character size mask.
302Values are \fBCS5\fP, \fBCS6\fP, \fBCS7\fP, or \fBCS8\fP.
303.TP
304.B CSTOPB
305Set two stop bits, rather than one.
306.TP
307.B CREAD
308Enable receiver.
309.TP
310.B PARENB
311Enable parity generation on output and parity checking for input.
312.TP
313.B PARODD
c13182ef 314If set, then parity for input and output is odd;
19ab0376 315otherwise even parity is used.
fea681da
MK
316.TP
317.B HUPCL
318Lower modem control lines after last process closes the device (hang up).
319.TP
320.B CLOCAL
321Ignore modem control lines.
322.TP
323.B LOBLK
24b74457 324(not in POSIX) Block output from a noncurrent shell layer.
42b09930 325For use by \fBshl\fP (shell layers). (Not implemented on Linux.)
fea681da
MK
326.TP
327.B CIBAUD
4a837837 328(not in POSIX) Mask for input speeds.
097585ed
MK
329The values for the
330.B CIBAUD
331bits are
332the same as the values for the
333.B CBAUD
334bits, shifted left
335.B IBSHIFT
336bits.
db4e96b7
MK
337[requires
338.B _BSD_SOURCE
c90511a6
MK
339or
340.BR _SVID_SOURCE ]
42b09930 341(Not implemented on Linux.)
fea681da 342.TP
adab6032 343.B CMSPAR
ad715af9 344(not in POSIX)
c13182ef 345Use "stick" (mark/space) parity (supported on certain serial
4a837837 346devices): if
c13182ef 347.B PARODD
adab6032 348is set, the parity bit is always 1; if
c13182ef 349.B PARODD
adab6032 350is not set, then the parity bit is always 0).
db4e96b7
MK
351[requires
352.B _BSD_SOURCE
c90511a6
MK
353or
354.BR _SVID_SOURCE ]
adab6032 355.TP
fea681da
MK
356.B CRTSCTS
357(not in POSIX) Enable RTS/CTS (hardware) flow control.
db4e96b7
MK
358[requires
359.B _BSD_SOURCE
c90511a6
MK
360or
361.BR _SVID_SOURCE ]
fea681da
MK
362.PP
363\fIc_lflag\fP flag constants:
364.TP
365.B ISIG
366When any of the characters INTR, QUIT, SUSP, or DSUSP are received,
367generate the corresponding signal.
368.TP
369.B ICANON
c13182ef 370Enable canonical mode (described below).
fea681da
MK
371.TP
372.B XCASE
373(not in POSIX; not supported under Linux)
374If \fBICANON\fP is also set, terminal is uppercase only.
375Input is converted to lowercase, except for characters preceded by \\.
376On output, uppercase characters are preceded by \\ and lowercase
377characters are converted to uppercase.
eee28e75 378[requires _BSD_SOURCE or _SVID_SOURCE or _XOPEN_SOURCE]
c3dfd2c8 379.\" glibc is probably now wrong to allow
eee28e75
MK
380.\" Define
381.\" .B _XOPEN_SOURCE
382.\" to expose
383.\" .BR XCASE .
fea681da
MK
384.TP
385.B ECHO
386Echo input characters.
387.TP
388.B ECHOE
389If \fBICANON\fP is also set, the ERASE character erases the preceding
390input character, and WERASE erases the preceding word.
391.TP
392.B ECHOK
393If \fBICANON\fP is also set, the KILL character erases the current line.
394.TP
395.B ECHONL
396If \fBICANON\fP is also set, echo the NL character even if ECHO is not set.
397.TP
398.B ECHOCTL
d8b24e6e
MK
399(not in POSIX) If \fBECHO\fP is also set,
400terminal special characters other than
8bb93cd4
MK
401TAB, NL, START, and STOP are echoed as \fB^X\fP,
402where X is the character with
d8b24e6e 403ASCII code 0x40 greater than the special character.
c13182ef 404For example, character
8bb93cd4 4050x08 (BS) is echoed as \fB^H\fP.
db4e96b7
MK
406[requires
407.B _BSD_SOURCE
c90511a6
MK
408or
409.BR _SVID_SOURCE ]
fea681da
MK
410.TP
411.B ECHOPRT
412(not in POSIX) If \fBICANON\fP and \fBIECHO\fP are also set, characters
413are printed as they are being erased.
db4e96b7
MK
414[requires
415.B _BSD_SOURCE
c90511a6
MK
416or
417.BR _SVID_SOURCE ]
fea681da
MK
418.TP
419.B ECHOKE
420(not in POSIX) If \fBICANON\fP is also set, KILL is echoed by erasing
421each character on the line, as specified by \fBECHOE\fP and \fBECHOPRT\fP.
db4e96b7
MK
422[requires
423.B _BSD_SOURCE
c90511a6
MK
424or
425.BR _SVID_SOURCE ]
fea681da
MK
426.TP
427.B DEFECHO
428(not in POSIX) Echo only when a process is reading.
42b09930 429(Not implemented on Linux.)
fea681da
MK
430.TP
431.B FLUSHO
432(not in POSIX; not supported under Linux)
c13182ef
MK
433Output is being flushed.
434This flag is toggled by typing
fea681da 435the DISCARD character.
db4e96b7
MK
436[requires
437.B _BSD_SOURCE
c90511a6
MK
438or
439.BR _SVID_SOURCE ]
fea681da
MK
440.TP
441.B NOFLSH
6e502d47
MK
442Disable flushing the input and output queues when generating signals for the
443INT, QUIT, and SUSP characters.
444.\" Stevens lets SUSP only flush the input queue
fea681da
MK
445.TP
446.B TOSTOP
8bd58774
MK
447Send the
448.B SIGTTOU
449signal to the process group of a background process
fea681da
MK
450which tries to write to its controlling terminal.
451.TP
452.B PENDIN
453(not in POSIX; not supported under Linux)
454All characters in the input queue are reprinted when
c13182ef 455the next character is read.
5852aba2
MK
456.RB ( bash (1)
457handles typeahead this way.)
db4e96b7
MK
458[requires
459.B _BSD_SOURCE
c90511a6
MK
460or
461.BR _SVID_SOURCE ]
fea681da
MK
462.TP
463.B IEXTEN
464Enable implementation-defined input processing.
0425de01 465This flag, as well as \fBICANON\fP must be enabled for the
fea681da
MK
466special characters EOL2, LNEXT, REPRINT, WERASE to be interpreted,
467and for the \fBIUCLC\fP flag to be effective.
468.PP
d8b24e6e 469The \fIc_cc\fP array defines the terminal special characters.
fea681da
MK
470The symbolic indices (initial values) and meaning are:
471.TP
91e2779f
MK
472.B VDISCARD
473(not in POSIX; not supported under Linux; 017, SI, Ctrl-O)
474Toggle: start/stop discarding pending output.
097585ed 475Recognized when
91e2779f 476.B IEXTEN
097585ed 477is set, and then not passed as input.
fea681da 478.TP
91e2779f
MK
479.B VDSUSP
480(not in POSIX; not supported under Linux; 031, EM, Ctrl-Y)
489e425d 481Delayed suspend character (DSUSP):
91e2779f
MK
482send
483.B SIGTSTP
484signal when the character is read by the user program.
097585ed 485Recognized when
91e2779f
MK
486.B IEXTEN
487and
097585ed 488.B ISIG
91e2779f
MK
489are set, and the system supports
490job control, and then not passed as input.
fea681da
MK
491.TP
492.B VEOF
493(004, EOT, Ctrl-D)
489e425d 494End-of-file character (EOF).
fea681da
MK
495More precisely: this character causes the pending tty buffer to be sent
496to the waiting user program without waiting for end-of-line.
d9c1ae64
MK
497If it is the first character of the line, the
498.BR read (2)
499in the user program returns 0, which signifies end-of-file.
097585ed
MK
500Recognized when
501.B ICANON
502is set, and then not passed as input.
fea681da 503.TP
fea681da
MK
504.B VEOL
505(0, NUL)
489e425d 506Additional end-of-line character (EOL).
097585ed
MK
507Recognized when
508.B ICANON
509is set.
fea681da 510.TP
fea681da
MK
511.B VEOL2
512(not in POSIX; 0, NUL)
489e425d 513Yet another end-of-line character (EOL2).
097585ed
MK
514Recognized when
515.B ICANON
516is set.
fea681da 517.TP
91e2779f
MK
518.B VERASE
519(0177, DEL, rubout, or 010, BS, Ctrl-H, or also #)
489e425d 520Erase character (ERASE).
91e2779f
MK
521This erases the previous not-yet-erased character,
522but does not erase past EOF or beginning-of-line.
097585ed 523Recognized when
91e2779f 524.B ICANON
097585ed 525is set, and then not passed as input.
fea681da 526.TP
91e2779f
MK
527.B VINTR
528(003, ETX, Ctrl-C, or also 0177, DEL, rubout)
489e425d 529Interrupt character (INTR).
91e2779f
MK
530Send a
531.B SIGINT
8bd58774 532signal.
097585ed
MK
533Recognized when
534.B ISIG
535is set, and then not passed as input.
fea681da 536.TP
91e2779f
MK
537.B VKILL
538(025, NAK, Ctrl-U, or Ctrl-X, or also @)
489e425d 539Kill character (KILL).
91e2779f 540This erases the input since the last EOF or beginning-of-line.
097585ed 541Recognized when
91e2779f
MK
542.B ICANON
543is set, and then not passed as input.
fea681da
MK
544.TP
545.B VLNEXT
546(not in POSIX; 026, SYN, Ctrl-V)
489e425d 547Literal next (LNEXT).
c13182ef 548Quotes the next input character, depriving it of
fea681da 549a possible special meaning.
097585ed
MK
550Recognized when
551.B IEXTEN
552is set, and then not passed as input.
fea681da 553.TP
91e2779f 554.B VMIN
489e425d 555Minimum number of characters for noncanonical read (MIN).
91e2779f
MK
556.TP
557.B VQUIT
558(034, FS, Ctrl-\e)
489e425d 559Quit character (QUIT).
91e2779f
MK
560Send
561.B SIGQUIT
562signal.
097585ed 563Recognized when
91e2779f
MK
564.B ISIG
565is set, and then not passed as input.
fea681da
MK
566.TP
567.B VREPRINT
568(not in POSIX; 022, DC2, Ctrl-R)
489e425d 569Reprint unread characters (REPRINT).
097585ed
MK
570Recognized when
571.B ICANON
572and
573.B IEXTEN
574are set, and then not passed as input.
fea681da 575.TP
91e2779f
MK
576.B VSTART
577(021, DC1, Ctrl-Q)
489e425d 578Start character (START).
91e2779f 579Restarts output stopped by the Stop character.
097585ed 580Recognized when
91e2779f 581.B IXON
097585ed 582is set, and then not passed as input.
fea681da
MK
583.TP
584.B VSTATUS
585(not in POSIX; not supported under Linux;
586status request: 024, DC4, Ctrl-T).
a6639d09
MK
587Status character (STATUS).
588Display status information at terminal,
589including state of foreground process and amount of CPU time it has consumed.
590Also sends a
591.BR SIGINFO
592signal (not supported on Linux) to the foreground process group.
91e2779f
MK
593.TP
594.B VSTOP
595(023, DC3, Ctrl-S)
489e425d 596Stop character (STOP).
91e2779f
MK
597Stop output until Start character typed.
598Recognized when
599.B IXON
600is set, and then not passed as input.
601.TP
602.B VSUSP
603(032, SUB, Ctrl-Z)
489e425d 604Suspend character (SUSP).
91e2779f
MK
605Send
606.B SIGTSTP
607signal.
608Recognized when
609.B ISIG
610is set, and then not passed as input.
611.TP
612.B VSWTCH
613(not in POSIX; not supported under Linux; 0, NUL)
489e425d 614Switch character (SWTCH).
91e2779f
MK
615(Used by \fBshl\fP only.)
616.TP
617.B VTIME
489e425d 618Timeout in deciseconds for noncanonical read (TIME).
91e2779f
MK
619.TP
620.B VWERASE
621(not in POSIX; 027, ETB, Ctrl-W)
489e425d 622Word erase (WERASE).
91e2779f
MK
623Recognized when
624.B ICANON
625and
626.B IEXTEN
627are set, and then not passed as input.
fea681da 628.LP
d51529b8
MK
629An individual terminal special character can be disabled by setting
630the value of the corresponding
631.I c_cc
632element to
633.BR _POSIX_VDISABLE .
634.LP
635The above symbolic subscript values are all different, except that
097585ed 636.BR VTIME ,
0daa9e92 637.B VMIN
097585ed 638may have the same value as
3cf81850 639.BR VEOL ,
097585ed
MK
640.BR VEOF ,
641respectively.
a6712802 642In noncanonical mode the special character meaning is replaced
c13182ef 643by the timeout meaning.
097585ed
MK
644For an explanation of
645.B VMIN
646and
647.BR VTIME ,
648see the description of
a6712802 649noncanonical mode below.
87d1fd87 650.SS "Retrieving and changing terminal settings"
fea681da 651.PP
63aa9df0 652.BR tcgetattr ()
fea681da 653gets the parameters associated with the object referred by \fIfd\fP and
869ebe5b 654stores them in the \fItermios\fP structure referenced by
c13182ef
MK
655\fItermios_p\fP.
656This function may be invoked from a background process;
fea681da
MK
657however, the terminal attributes may be subsequently changed by a
658foreground process.
659.LP
63aa9df0 660.BR tcsetattr ()
fea681da
MK
661sets the parameters associated with the terminal (unless support is
662required from the underlying hardware that is not available) from the
c13182ef 663\fItermios\fP structure referred to by \fItermios_p\fP.
fea681da
MK
664\fIoptional_actions\fP specifies when the changes take effect:
665.IP \fBTCSANOW\fP
666the change occurs immediately.
667.IP \fBTCSADRAIN\fP
668the change occurs after all output written to
669.I fd
c13182ef
MK
670has been transmitted.
671This function should be used when changing
fea681da
MK
672parameters that affect output.
673.IP \fBTCSAFLUSH\fP
674the change occurs after all output written to the object referred by
675.I fd
676has been transmitted, and all input that has been received but not read
677will be discarded before the change is made.
a6712802 678.SS "Canonical and noncanonical mode"
19ab0376
MK
679The setting of the
680.B ICANON
681canon flag in
682.I c_lflag
683determines whether the terminal is operating in canonical mode
684.RB ( ICANON
685set) or
a6712802 686noncanonical mode
c13182ef 687.RB ( ICANON
19ab0376
MK
688unset).
689By default,
690.B ICANON
691set.
692
693In canonical mode:
694.IP * 2
695Input is made available line by line.
696An input line is available when one of the line delimiters
697is typed (NL, EOL, EOL2; or EOF at the start of line).
698Except in the case of EOF, the line delimiter is included
699in the buffer returned by
700.BR read (2).
701.IP * 2
c13182ef
MK
702Line editing is enabled (ERASE, KILL;
703and if the
19ab0376
MK
704.B IEXTEN
705flag is set: WERASE, REPRINT, LNEXT).
c13182ef 706A
fb186734 707.BR read (2)
19ab0376 708returns at most one line of input; if the
fb186734 709.BR read (2)
19ab0376
MK
710requested fewer bytes than are available in the current line of input,
711then only as many bytes as requested are read,
712and the remaining characters will be available for a future
fb186734 713.BR read (2).
19ab0376 714.PP
a6712802 715In noncanonical mode input is available immediately (without
19ab0376
MK
716the user having to type a line-delimiter character),
717and line editing is disabled.
c13182ef 718The settings of MIN
19ab0376 719.RI ( c_cc[VMIN] )
0f8b10eb 720and TIME
19ab0376
MK
721.RI ( c_cc[VTIME] )
722determine the circumstances in which a
723.BR read (2)
724completes; there are four distinct cases:
725.IP * 2
726MIN == 0; TIME == 0:
727If data is available,
fb186734 728.BR read (2)
19ab0376
MK
729returns immediately, with the lesser of the number of bytes
730available, or the number of bytes requested.
731If no data is available,
fb186734 732.BR read (2)
19ab0376
MK
733returns 0.
734.IP * 2
735MIN > 0; TIME == 0:
fb186734 736.BR read (2)
19ab0376
MK
737blocks until the lesser of MIN bytes or the number of bytes requested
738are available, and returns the lesser of these two values.
739.IP * 2
740MIN == 0; TIME > 0:
741TIME specifies the limit for a timer in tenths of a second.
c13182ef 742The timer is started when
fb186734 743.BR read (2)
19ab0376 744is called.
fb186734 745.BR read (2)
19ab0376
MK
746returns either when at least one byte of data is available,
747or when the timer expires.
748If the timer expires without any input becoming available,
fb186734 749.BR read (2)
19ab0376
MK
750returns 0.
751.IP * 2
752MIN > 0; TIME > 0:
753TIME specifies the limit for a timer in tenths of a second.
754Once an initial byte of input becomes available,
755the timer is restarted after each further byte is received.
fb186734 756.BR read (2)
c13182ef 757returns either when the lesser of the number of bytes requested or
19ab0376
MK
758MIN byte have been read,
759or when the inter-byte timeout expires.
c13182ef 760Because the timer is only started after the initial byte
19ab0376
MK
761becomes available, at least one byte will be read.
762.SS "Raw mode"
763.LP
60a90ecd
MK
764.BR cfmakeraw ()
765sets the terminal to something like the
1954b6a9 766"raw" mode of the old Version 7 terminal driver:
19ab0376 767input is available character by character,
c13182ef 768echoing is disabled, and all special processing of
19ab0376
MK
769terminal input and output characters is disabled.
770The terminal attributes are set as follows:
771.nf
772
94e9d9fe 773 termios_p\->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
19ab0376 774 | INLCR | IGNCR | ICRNL | IXON);
94e9d9fe
MK
775 termios_p\->c_oflag &= ~OPOST;
776 termios_p\->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
777 termios_p\->c_cflag &= ~(CSIZE | PARENB);
778 termios_p\->c_cflag |= CS8;
19ab0376 779.fi
87d1fd87 780.SS "Line control"
fea681da 781.LP
63aa9df0 782.BR tcsendbreak ()
fea681da
MK
783transmits a continuous stream of zero-valued bits for a specific
784duration, if the terminal is using asynchronous serial data
c13182ef
MK
785transmission.
786If \fIduration\fP is zero, it transmits zero-valued bits
787for at least 0.25 seconds, and not more that 0.5 seconds.
788If \fIduration\fP is not zero, it sends zero-valued bits for some
fea681da
MK
789implementation-defined length of time.
790.LP
791If the terminal is not using asynchronous serial data transmission,
60a90ecd
MK
792.BR tcsendbreak ()
793returns without taking any action.
fea681da 794.LP
63aa9df0 795.BR tcdrain ()
fea681da
MK
796waits until all output written to the object referred to by
797.I fd
798has been transmitted.
799.LP
63aa9df0 800.BR tcflush ()
fea681da
MK
801discards data written to the object referred to by
802.I fd
803but not transmitted, or data received but not read, depending on the
804value of
805.IR queue_selector :
806.IP \fBTCIFLUSH\fP
807flushes data received but not read.
808.IP \fBTCOFLUSH\fP
809flushes data written but not transmitted.
810.IP \fBTCIOFLUSH\fP
811flushes both data received but not read, and data written but not
812transmitted.
813.LP
63aa9df0 814.BR tcflow ()
fea681da
MK
815suspends transmission or reception of data on the object referred to by
816.IR fd ,
817depending on the value of
818.IR action :
819.IP \fBTCOOFF\fP
820suspends output.
821.IP \fBTCOON\fP
822restarts suspended output.
823.IP \fBTCIOFF\fP
c13182ef 824transmits a STOP character, which stops the terminal device from
35478399 825transmitting data to the system.
fea681da 826.IP \fBTCION\fP
c13182ef 827transmits a START character, which starts the terminal device
35478399 828transmitting data to the system.
fea681da
MK
829.LP
830The default on open of a terminal file is that neither its input nor its
831output is suspended.
87d1fd87
MK
832.SS "Line speed"
833The baud rate functions are provided for getting and setting the values
c13182ef
MK
834of the input and output baud rates in the \fItermios\fP structure.
835The new values do not take effect
60a90ecd
MK
836until
837.BR tcsetattr ()
838is successfully called.
87d1fd87
MK
839
840Setting the speed to \fBB0\fP instructs the modem to "hang up".
841The actual bit rate corresponding to \fBB38400\fP may be altered with
60a90ecd 842.BR setserial (8).
87d1fd87
MK
843.LP
844The input and output baud rates are stored in the \fItermios\fP
845structure.
fea681da 846.LP
63aa9df0 847.BR cfgetospeed ()
869ebe5b 848returns the output baud rate stored in the \fItermios\fP structure
fea681da
MK
849pointed to by
850.IR termios_p .
851.LP
63aa9df0 852.BR cfsetospeed ()
869ebe5b 853sets the output baud rate stored in the \fItermios\fP structure pointed
fea681da
MK
854to by \fItermios_p\fP to \fIspeed\fP, which must be one of these constants:
855.nf
869ebe5b 856
fea681da
MK
857.ft B
858 B0
859 B50
860 B75
861 B110
862 B134
863 B150
864 B200
865 B300
866 B600
867 B1200
868 B1800
869 B2400
870 B4800
871 B9600
872 B19200
873 B38400
874 B57600
875 B115200
876 B230400
877.ft P
869ebe5b 878
fea681da
MK
879.fi
880The zero baud rate, \fBB0\fP,
c13182ef
MK
881is used to terminate the connection.
882If B0 is specified, the modem control lines shall no longer be asserted.
be7fff26
MK
883Normally, this will disconnect the line.
884\fBCBAUDEX\fP is a mask
fea681da 885for the speeds beyond those defined in POSIX.1 (57600 and above).
c7094399 886Thus, \fBB57600\fP & \fBCBAUDEX\fP is nonzero.
fea681da 887.LP
63aa9df0 888.BR cfgetispeed ()
869ebe5b 889returns the input baud rate stored in the \fItermios\fP structure.
fea681da 890.LP
63aa9df0 891.BR cfsetispeed ()
869ebe5b 892sets the input baud rate stored in the \fItermios\fP structure to
c13182ef 893.IR speed ,
869ebe5b
MK
894which must be specified as one of the \fBBnnn\fP constants listed above for
895.BR cfsetospeed ().
fea681da
MK
896If the input baud rate is set to zero, the input baud rate will be
897equal to the output baud rate.
898.LP
63aa9df0 899.BR cfsetspeed ()
c13182ef
MK
900is a 4.4BSD extension.
901It takes the same arguments as
869ebe5b
MK
902.BR cfsetispeed (),
903and sets both input and output speed.
fea681da
MK
904.SH "RETURN VALUE"
905.LP
63aa9df0 906.BR cfgetispeed ()
fea681da 907returns the input baud rate stored in the
869ebe5b 908\fItermios\fP
fea681da
MK
909structure.
910.LP
63aa9df0 911.BR cfgetospeed ()
869ebe5b 912returns the output baud rate stored in the \fItermios\fP structure.
fea681da
MK
913.LP
914All other functions return:
915.IP 0
916on success.
917.IP \-1
918on failure and set
919.I errno
920to indicate the error.
921.LP
922Note that
f87925c6 923.BR tcsetattr ()
fea681da 924returns success if \fIany\fP of the requested changes could be
c13182ef
MK
925successfully carried out.
926Therefore, when making multiple changes
fea681da 927it may be necessary to follow this call with a further call to
f87925c6 928.BR tcgetattr ()
fea681da 929to check that all changes have been performed successfully.
dfb631a8
MK
930.SH CONFORMING TO
931.BR tcgetattr (),
932.BR tcsetattr (),
933.BR tcsendbreak (),
934.BR tcdrain (),
935.BR tcflush (),
936.BR tcflow (),
937.BR cfgetispeed (),
938.BR cfgetospeed (),
939.BR cfsetispeed (),
940and
941.BR cfsetospeed ()
942are specified in POSIX.1-2001.
943
944.BR cfmakeraw ()
01d5d366
MK
945and
946.BR cfsetspeed ()
c8f2dd47 947are nonstandard, but available on the BSDs.
fea681da 948.SH NOTES
1f409d5d 949UNIX V7 and several later systems have a list of baud rates
fea681da
MK
950where after the fourteen values B0, ..., B9600 one finds the
951two constants EXTA, EXTB ("External A" and "External B").
952Many systems extend the list with much higher baud rates.
953.LP
c7094399 954The effect of a nonzero \fIduration\fP with
60a90ecd
MK
955.BR tcsendbreak ()
956varies.
c13182ef 957SunOS specifies a break of
8b8d0001 958.I "duration\ *\ N"
fea681da
MK
959seconds, where \fIN\fP is at least 0.25, and not more than 0.5.
960Linux, AIX, DU, Tru64 send a break of
961.I duration
962milliseconds.
963FreeBSD and NetBSD and HP-UX and MacOS ignore the value of
964.IR duration .
1f409d5d 965Under Solaris and UnixWare,
e511ffb6 966.BR tcsendbreak ()
c7094399 967with nonzero
fea681da
MK
968.I duration
969behaves like
e511ffb6 970.BR tcdrain ().
fea681da
MK
971.\" libc4 until 4.7.5, glibc for sysv: EINVAL for duration > 0.
972.\" libc4.7.6, libc5, glibc for unix: duration in ms.
973.\" glibc for bsd: duration in us
974.\" glibc for sunos4: ignore duration
975.SH "SEE ALSO"
976.BR stty (1),
fe62e3de
MK
977.BR console_ioctl (4),
978.BR tty_ioctl (4),
fea681da 979.BR setserial (8)