]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man3/termios.3
sync
[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.
37.\" Added a section on canonical and non-canonical mode.
38.\" Enhanced the discussion of "raw" mode for cfmakeraw().
39.\" Document CMSPAR.
fea681da 40.\"
2ccfac8b 41.TH TERMIOS 3 2007-11-26 "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 */
101cc_t c_cc[NCCS]; /* control chars */
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
c382a365 324(not in POSIX) Block output from a non-current 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
399(not in POSIX) If \fBECHO\fP is also set, ASCII control signals other than
400TAB, NL, START, and STOP are echoed as ^X, where X is the character with
c13182ef
MK
401ASCII code 0x40 greater than the control signal.
402For example, character
fea681da 4030x08 (BS) is echoed as ^H.
db4e96b7
MK
404[requires
405.B _BSD_SOURCE
c90511a6
MK
406or
407.BR _SVID_SOURCE ]
fea681da
MK
408.TP
409.B ECHOPRT
410(not in POSIX) If \fBICANON\fP and \fBIECHO\fP are also set, characters
411are printed as they are being erased.
db4e96b7
MK
412[requires
413.B _BSD_SOURCE
c90511a6
MK
414or
415.BR _SVID_SOURCE ]
fea681da
MK
416.TP
417.B ECHOKE
418(not in POSIX) If \fBICANON\fP is also set, KILL is echoed by erasing
419each character on the line, as specified by \fBECHOE\fP and \fBECHOPRT\fP.
db4e96b7
MK
420[requires
421.B _BSD_SOURCE
c90511a6
MK
422or
423.BR _SVID_SOURCE ]
fea681da
MK
424.TP
425.B DEFECHO
426(not in POSIX) Echo only when a process is reading.
42b09930 427(Not implemented on Linux.)
fea681da
MK
428.TP
429.B FLUSHO
430(not in POSIX; not supported under Linux)
c13182ef
MK
431Output is being flushed.
432This flag is toggled by typing
fea681da 433the DISCARD character.
db4e96b7
MK
434[requires
435.B _BSD_SOURCE
c90511a6
MK
436or
437.BR _SVID_SOURCE ]
fea681da
MK
438.TP
439.B NOFLSH
8bd58774
MK
440Disable flushing the input and output queues when generating the
441.BR SIGINT ,
988db661 442.BR SIGQUIT ,
8bd58774
MK
443and
444.B SIGSUSP
445signals.
fea681da
MK
446.\" Stevens lets SIGSUSP only flush the input queue
447.TP
448.B TOSTOP
8bd58774
MK
449Send the
450.B SIGTTOU
451signal to the process group of a background process
fea681da
MK
452which tries to write to its controlling terminal.
453.TP
454.B PENDIN
455(not in POSIX; not supported under Linux)
456All characters in the input queue are reprinted when
c13182ef 457the next character is read.
5852aba2
MK
458.RB ( bash (1)
459handles typeahead this way.)
db4e96b7
MK
460[requires
461.B _BSD_SOURCE
c90511a6
MK
462or
463.BR _SVID_SOURCE ]
fea681da
MK
464.TP
465.B IEXTEN
466Enable implementation-defined input processing.
467This flag, as well as \fBICANON\fP must be enabled for the
468special characters EOL2, LNEXT, REPRINT, WERASE to be interpreted,
469and for the \fBIUCLC\fP flag to be effective.
470.PP
471The \fIc_cc\fP array defines the special control characters.
472The symbolic indices (initial values) and meaning are:
473.TP
474.B VINTR
475(003, ETX, Ctrl-C, or also 0177, DEL, rubout)
c13182ef 476Interrupt character.
8bd58774
MK
477Send a
478.B SIGINT
479signal.
097585ed
MK
480Recognized when
481.B ISIG
482is set, and then not passed as input.
fea681da
MK
483.TP
484.B VQUIT
485(034, FS, Ctrl-\e)
c13182ef 486Quit character.
8bd58774 487Send
0daa9e92 488.B SIGQUIT
8bd58774 489signal.
097585ed
MK
490Recognized when
491.B ISIG
492is set, and then not passed as input.
fea681da
MK
493.TP
494.B VERASE
495(0177, DEL, rubout, or 010, BS, Ctrl-H, or also #)
c13182ef
MK
496Erase character.
497This erases the previous not-yet-erased character,
fea681da 498but does not erase past EOF or beginning-of-line.
097585ed
MK
499Recognized when
500.B ICANON
501is set, and then not passed as input.
fea681da
MK
502.TP
503.B VKILL
504(025, NAK, Ctrl-U, or Ctrl-X, or also @)
c13182ef 505Kill character.
19ab0376 506This erases the input since the last EOF or beginning-of-line.
097585ed
MK
507Recognized when
508.B ICANON
509is set, and then not passed as input.
fea681da
MK
510.TP
511.B VEOF
512(004, EOT, Ctrl-D)
513End-of-file character.
514More precisely: this character causes the pending tty buffer to be sent
515to the waiting user program without waiting for end-of-line.
d9c1ae64
MK
516If it is the first character of the line, the
517.BR read (2)
518in the user program returns 0, which signifies end-of-file.
097585ed
MK
519Recognized when
520.B ICANON
521is set, and then not passed as input.
fea681da
MK
522.TP
523.B VMIN
524Minimum number of characters for non-canonical read.
525.TP
526.B VEOL
527(0, NUL)
528Additional end-of-line character.
097585ed
MK
529Recognized when
530.B ICANON
531is set.
fea681da
MK
532.TP
533.B VTIME
534Timeout in deciseconds for non-canonical read.
535.TP
536.B VEOL2
537(not in POSIX; 0, NUL)
538Yet another end-of-line character.
097585ed
MK
539Recognized when
540.B ICANON
541is set.
fea681da
MK
542.TP
543.B VSWTCH
544(not in POSIX; not supported under Linux; 0, NUL)
c13182ef
MK
545Switch character.
546(Used by \fBshl\fP only.)
fea681da
MK
547.TP
548.B VSTART
549(021, DC1, Ctrl-Q)
c13182ef
MK
550Start character.
551Restarts output stopped by the Stop character.
097585ed
MK
552Recognized when
553.B IXON
554is set, and then not passed as input.
fea681da
MK
555.TP
556.B VSTOP
557(023, DC3, Ctrl-S)
c13182ef
MK
558Stop character.
559Stop output until Start character typed.
097585ed
MK
560Recognized when
561.B IXON
562is set, and then not passed as input.
fea681da
MK
563.TP
564.B VSUSP
565(032, SUB, Ctrl-Z)
c13182ef 566Suspend character.
8bd58774
MK
567Send
568.B SIGTSTP
569signal.
097585ed
MK
570Recognized when
571.B ISIG
572is set, and then not passed as input.
fea681da
MK
573.TP
574.B VDSUSP
575(not in POSIX; not supported under Linux; 031, EM, Ctrl-Y)
576Delayed suspend character:
8bd58774
MK
577send
578.B SIGTSTP
579signal when the character is read by the user program.
097585ed
MK
580Recognized when
581.B IEXTEN
582and
74d32233
MK
583.B ISIG
584are set, and the system supports
fea681da
MK
585job control, and then not passed as input.
586.TP
587.B VLNEXT
588(not in POSIX; 026, SYN, Ctrl-V)
c13182ef
MK
589Literal next.
590Quotes the next input character, depriving it of
fea681da 591a possible special meaning.
097585ed
MK
592Recognized when
593.B IEXTEN
594is set, and then not passed as input.
fea681da
MK
595.TP
596.B VWERASE
597(not in POSIX; 027, ETB, Ctrl-W)
598Word erase.
097585ed
MK
599Recognized when
600.B ICANON
601and
602.B IEXTEN
603are set, and then not passed as input.
fea681da
MK
604.TP
605.B VREPRINT
606(not in POSIX; 022, DC2, Ctrl-R)
607Reprint unread characters.
097585ed
MK
608Recognized when
609.B ICANON
610and
611.B IEXTEN
612are set, and then not passed as input.
fea681da
MK
613.TP
614.B VDISCARD
615(not in POSIX; not supported under Linux; 017, SI, Ctrl-O)
616Toggle: start/stop discarding pending output.
097585ed
MK
617Recognized when
618.B IEXTEN
619is set, and then not passed as input.
fea681da
MK
620.TP
621.B VSTATUS
622(not in POSIX; not supported under Linux;
623status request: 024, DC4, Ctrl-T).
624.LP
625These symbolic subscript values are all different, except that
097585ed 626.BR VTIME ,
0daa9e92 627.B VMIN
097585ed
MK
628may have the same value as
629.BR VEOL ,
630.BR VEOF ,
631respectively.
42b09930 632In non-canonical mode the special character meaning is replaced
c13182ef 633by the timeout meaning.
097585ed
MK
634For an explanation of
635.B VMIN
636and
637.BR VTIME ,
638see the description of
19ab0376 639non-canonical mode below.
87d1fd87 640.SS "Retrieving and changing terminal settings"
fea681da 641.PP
63aa9df0 642.BR tcgetattr ()
fea681da 643gets the parameters associated with the object referred by \fIfd\fP and
869ebe5b 644stores them in the \fItermios\fP structure referenced by
c13182ef
MK
645\fItermios_p\fP.
646This function may be invoked from a background process;
fea681da
MK
647however, the terminal attributes may be subsequently changed by a
648foreground process.
649.LP
63aa9df0 650.BR tcsetattr ()
fea681da
MK
651sets the parameters associated with the terminal (unless support is
652required from the underlying hardware that is not available) from the
c13182ef 653\fItermios\fP structure referred to by \fItermios_p\fP.
fea681da
MK
654\fIoptional_actions\fP specifies when the changes take effect:
655.IP \fBTCSANOW\fP
656the change occurs immediately.
657.IP \fBTCSADRAIN\fP
658the change occurs after all output written to
659.I fd
c13182ef
MK
660has been transmitted.
661This function should be used when changing
fea681da
MK
662parameters that affect output.
663.IP \fBTCSAFLUSH\fP
664the change occurs after all output written to the object referred by
665.I fd
666has been transmitted, and all input that has been received but not read
667will be discarded before the change is made.
19ab0376
MK
668.SS "Canonical and non-canonical mode"
669The setting of the
670.B ICANON
671canon flag in
672.I c_lflag
673determines whether the terminal is operating in canonical mode
674.RB ( ICANON
675set) or
676non-canonical mode
c13182ef 677.RB ( ICANON
19ab0376
MK
678unset).
679By default,
680.B ICANON
681set.
682
683In canonical mode:
684.IP * 2
685Input is made available line by line.
686An input line is available when one of the line delimiters
687is typed (NL, EOL, EOL2; or EOF at the start of line).
688Except in the case of EOF, the line delimiter is included
689in the buffer returned by
690.BR read (2).
691.IP * 2
c13182ef
MK
692Line editing is enabled (ERASE, KILL;
693and if the
19ab0376
MK
694.B IEXTEN
695flag is set: WERASE, REPRINT, LNEXT).
c13182ef 696A
fb186734 697.BR read (2)
19ab0376 698returns at most one line of input; if the
fb186734 699.BR read (2)
19ab0376
MK
700requested fewer bytes than are available in the current line of input,
701then only as many bytes as requested are read,
702and the remaining characters will be available for a future
fb186734 703.BR read (2).
19ab0376 704.PP
c13182ef 705In non-canonical mode input is available immediately (without
19ab0376
MK
706the user having to type a line-delimiter character),
707and line editing is disabled.
c13182ef 708The settings of MIN
19ab0376 709.RI ( c_cc[VMIN] )
0f8b10eb 710and TIME
19ab0376
MK
711.RI ( c_cc[VTIME] )
712determine the circumstances in which a
713.BR read (2)
714completes; there are four distinct cases:
715.IP * 2
716MIN == 0; TIME == 0:
717If data is available,
fb186734 718.BR read (2)
19ab0376
MK
719returns immediately, with the lesser of the number of bytes
720available, or the number of bytes requested.
721If no data is available,
fb186734 722.BR read (2)
19ab0376
MK
723returns 0.
724.IP * 2
725MIN > 0; TIME == 0:
fb186734 726.BR read (2)
19ab0376
MK
727blocks until the lesser of MIN bytes or the number of bytes requested
728are available, and returns the lesser of these two values.
729.IP * 2
730MIN == 0; TIME > 0:
731TIME specifies the limit for a timer in tenths of a second.
c13182ef 732The timer is started when
fb186734 733.BR read (2)
19ab0376 734is called.
fb186734 735.BR read (2)
19ab0376
MK
736returns either when at least one byte of data is available,
737or when the timer expires.
738If the timer expires without any input becoming available,
fb186734 739.BR read (2)
19ab0376
MK
740returns 0.
741.IP * 2
742MIN > 0; TIME > 0:
743TIME specifies the limit for a timer in tenths of a second.
744Once an initial byte of input becomes available,
745the timer is restarted after each further byte is received.
fb186734 746.BR read (2)
c13182ef 747returns either when the lesser of the number of bytes requested or
19ab0376
MK
748MIN byte have been read,
749or when the inter-byte timeout expires.
c13182ef 750Because the timer is only started after the initial byte
19ab0376
MK
751becomes available, at least one byte will be read.
752.SS "Raw mode"
753.LP
60a90ecd
MK
754.BR cfmakeraw ()
755sets the terminal to something like the
1954b6a9 756"raw" mode of the old Version 7 terminal driver:
19ab0376 757input is available character by character,
c13182ef 758echoing is disabled, and all special processing of
19ab0376
MK
759terminal input and output characters is disabled.
760The terminal attributes are set as follows:
761.nf
762
94e9d9fe 763 termios_p\->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
19ab0376 764 | INLCR | IGNCR | ICRNL | IXON);
94e9d9fe
MK
765 termios_p\->c_oflag &= ~OPOST;
766 termios_p\->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
767 termios_p\->c_cflag &= ~(CSIZE | PARENB);
768 termios_p\->c_cflag |= CS8;
19ab0376 769.fi
87d1fd87 770.SS "Line control"
fea681da 771.LP
63aa9df0 772.BR tcsendbreak ()
fea681da
MK
773transmits a continuous stream of zero-valued bits for a specific
774duration, if the terminal is using asynchronous serial data
c13182ef
MK
775transmission.
776If \fIduration\fP is zero, it transmits zero-valued bits
777for at least 0.25 seconds, and not more that 0.5 seconds.
778If \fIduration\fP is not zero, it sends zero-valued bits for some
fea681da
MK
779implementation-defined length of time.
780.LP
781If the terminal is not using asynchronous serial data transmission,
60a90ecd
MK
782.BR tcsendbreak ()
783returns without taking any action.
fea681da 784.LP
63aa9df0 785.BR tcdrain ()
fea681da
MK
786waits until all output written to the object referred to by
787.I fd
788has been transmitted.
789.LP
63aa9df0 790.BR tcflush ()
fea681da
MK
791discards data written to the object referred to by
792.I fd
793but not transmitted, or data received but not read, depending on the
794value of
795.IR queue_selector :
796.IP \fBTCIFLUSH\fP
797flushes data received but not read.
798.IP \fBTCOFLUSH\fP
799flushes data written but not transmitted.
800.IP \fBTCIOFLUSH\fP
801flushes both data received but not read, and data written but not
802transmitted.
803.LP
63aa9df0 804.BR tcflow ()
fea681da
MK
805suspends transmission or reception of data on the object referred to by
806.IR fd ,
807depending on the value of
808.IR action :
809.IP \fBTCOOFF\fP
810suspends output.
811.IP \fBTCOON\fP
812restarts suspended output.
813.IP \fBTCIOFF\fP
c13182ef 814transmits a STOP character, which stops the terminal device from
35478399 815transmitting data to the system.
fea681da 816.IP \fBTCION\fP
c13182ef 817transmits a START character, which starts the terminal device
35478399 818transmitting data to the system.
fea681da
MK
819.LP
820The default on open of a terminal file is that neither its input nor its
821output is suspended.
87d1fd87
MK
822.SS "Line speed"
823The baud rate functions are provided for getting and setting the values
c13182ef
MK
824of the input and output baud rates in the \fItermios\fP structure.
825The new values do not take effect
60a90ecd
MK
826until
827.BR tcsetattr ()
828is successfully called.
87d1fd87
MK
829
830Setting the speed to \fBB0\fP instructs the modem to "hang up".
831The actual bit rate corresponding to \fBB38400\fP may be altered with
60a90ecd 832.BR setserial (8).
87d1fd87
MK
833.LP
834The input and output baud rates are stored in the \fItermios\fP
835structure.
fea681da 836.LP
63aa9df0 837.BR cfgetospeed ()
869ebe5b 838returns the output baud rate stored in the \fItermios\fP structure
fea681da
MK
839pointed to by
840.IR termios_p .
841.LP
63aa9df0 842.BR cfsetospeed ()
869ebe5b 843sets the output baud rate stored in the \fItermios\fP structure pointed
fea681da
MK
844to by \fItermios_p\fP to \fIspeed\fP, which must be one of these constants:
845.nf
869ebe5b 846
fea681da
MK
847.ft B
848 B0
849 B50
850 B75
851 B110
852 B134
853 B150
854 B200
855 B300
856 B600
857 B1200
858 B1800
859 B2400
860 B4800
861 B9600
862 B19200
863 B38400
864 B57600
865 B115200
866 B230400
867.ft P
869ebe5b 868
fea681da
MK
869.fi
870The zero baud rate, \fBB0\fP,
c13182ef
MK
871is used to terminate the connection.
872If B0 is specified, the modem control lines shall no longer be asserted.
be7fff26
MK
873Normally, this will disconnect the line.
874\fBCBAUDEX\fP is a mask
fea681da 875for the speeds beyond those defined in POSIX.1 (57600 and above).
eba72288 876Thus, \fBB57600\fP & \fBCBAUDEX\fP is non-zero.
fea681da 877.LP
63aa9df0 878.BR cfgetispeed ()
869ebe5b 879returns the input baud rate stored in the \fItermios\fP structure.
fea681da 880.LP
63aa9df0 881.BR cfsetispeed ()
869ebe5b 882sets the input baud rate stored in the \fItermios\fP structure to
c13182ef 883.IR speed ,
869ebe5b
MK
884which must be specified as one of the \fBBnnn\fP constants listed above for
885.BR cfsetospeed ().
fea681da
MK
886If the input baud rate is set to zero, the input baud rate will be
887equal to the output baud rate.
888.LP
63aa9df0 889.BR cfsetspeed ()
c13182ef
MK
890is a 4.4BSD extension.
891It takes the same arguments as
869ebe5b
MK
892.BR cfsetispeed (),
893and sets both input and output speed.
fea681da
MK
894.SH "RETURN VALUE"
895.LP
63aa9df0 896.BR cfgetispeed ()
fea681da 897returns the input baud rate stored in the
869ebe5b 898\fItermios\fP
fea681da
MK
899structure.
900.LP
63aa9df0 901.BR cfgetospeed ()
869ebe5b 902returns the output baud rate stored in the \fItermios\fP structure.
fea681da
MK
903.LP
904All other functions return:
905.IP 0
906on success.
907.IP \-1
908on failure and set
909.I errno
910to indicate the error.
911.LP
912Note that
f87925c6 913.BR tcsetattr ()
fea681da 914returns success if \fIany\fP of the requested changes could be
c13182ef
MK
915successfully carried out.
916Therefore, when making multiple changes
fea681da 917it may be necessary to follow this call with a further call to
f87925c6 918.BR tcgetattr ()
fea681da 919to check that all changes have been performed successfully.
dfb631a8
MK
920.SH CONFORMING TO
921.BR tcgetattr (),
922.BR tcsetattr (),
923.BR tcsendbreak (),
924.BR tcdrain (),
925.BR tcflush (),
926.BR tcflow (),
927.BR cfgetispeed (),
928.BR cfgetospeed (),
929.BR cfsetispeed (),
930and
931.BR cfsetospeed ()
932are specified in POSIX.1-2001.
933
934.BR cfmakeraw ()
01d5d366
MK
935and
936.BR cfsetspeed ()
937are non-standard, but available on the BSDs.
fea681da
MK
938.SH NOTES
939Unix V7 and several later systems have a list of baud rates
940where after the fourteen values B0, ..., B9600 one finds the
941two constants EXTA, EXTB ("External A" and "External B").
942Many systems extend the list with much higher baud rates.
943.LP
eba72288 944The effect of a non-zero \fIduration\fP with
60a90ecd
MK
945.BR tcsendbreak ()
946varies.
c13182ef 947SunOS specifies a break of
fea681da
MK
948.IB duration * N
949seconds, where \fIN\fP is at least 0.25, and not more than 0.5.
950Linux, AIX, DU, Tru64 send a break of
951.I duration
952milliseconds.
953FreeBSD and NetBSD and HP-UX and MacOS ignore the value of
954.IR duration .
955Under Solaris and Unixware,
e511ffb6 956.BR tcsendbreak ()
eba72288 957with non-zero
fea681da
MK
958.I duration
959behaves like
e511ffb6 960.BR tcdrain ().
fea681da
MK
961.\" libc4 until 4.7.5, glibc for sysv: EINVAL for duration > 0.
962.\" libc4.7.6, libc5, glibc for unix: duration in ms.
963.\" glibc for bsd: duration in us
964.\" glibc for sunos4: ignore duration
965.SH "SEE ALSO"
966.BR stty (1),
fe62e3de
MK
967.BR console_ioctl (4),
968.BR tty_ioctl (4),
fea681da 969.BR setserial (8)