xref: /illumos-gate/usr/src/man/man4i/termio.4i (revision ce17336ed725d3b7fdff67bf0a0ee2b55018fec6)
1.\" Copyright (c) 2005, Sun Microsystems, Inc.  All Rights Reserved.
2.\" Copyright 2019, Joyent, Inc.  All Rights Reserved.
3.\" Copyright 1989 AT&T
4.\" The contents of this file are subject to the terms of the
5.\" Common Development and Distribution License (the "License").
6.\" You may not use this file except in compliance with the License.
7.\"
8.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9.\" or http://www.opensolaris.org/os/licensing.
10.\" See the License for the specific language governing permissions
11.\" and limitations under the License.
12.\"
13.\" When distributing Covered Code, include this CDDL HEADER in each
14.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15.\" If applicable, add the following below this CDDL HEADER, with the
16.\" fields enclosed by brackets "[]" replaced with your own identifying
17.\" information: Portions Copyright [yyyy] [name of copyright owner]
18.Dd March 13, 2022
19.Dt TERMIO 4I
20.Os
21.Sh NAME
22.Nm termio
23.Nd general terminal interface
24.Sh SYNOPSIS
25.In termio.h
26.Fn ioctl "int fildes" "int request" "struct termio *arg"
27.Fn ioctl "int fildes" "int request" "int arg"
28.Pp
29.In termios.h
30.Fn ioctl "int fildes" "int request" "struct termios *arg"
31.Sh DESCRIPTION
32This release supports a general interface for asynchronous communications ports
33that is hardware-independent.
34The user interface to this functionality is using
35function calls (the preferred interface) described in
36.Xr termios 3C
37or
38.Fn ioctl
39commands described in this section.
40This section also discusses the
41common features of the terminal subsystem which are relevant with both user
42interfaces.
43.Pp
44When a terminal file is opened, it normally causes the process to wait until a
45connection is established.
46In practice, user programs seldom open terminal
47files; they are opened by the system and become a user's standard input,
48output, and error files.
49The first terminal file opened by the session leader
50that is not already associated with a session becomes the controlling terminal
51for that session.
52The controlling terminal plays a special role in handling
53quit and interrupt signals, as discussed below.
54The controlling terminal is
55inherited by a child process during a
56.Xr fork 2 .
57A process can break this
58association by changing its session using
59.Xr setsid 2 .
60.Pp
61A terminal associated with one of these files ordinarily operates in
62full-duplex mode.
63Characters may be typed at any time, even while output is
64occurring, and are only lost when the character input buffers of the system
65become completely full, which is rare.
66For example, the number of characters in
67the line discipline buffer may exceed
68.Brq Dv MAX_CANON
69and
70.Dv IMAXBEL
71(see below) is not set, or the user may accumulate
72.Brq Dv MAX_INPUT
73number of input characters that have not yet been read by some program.
74When the input
75limit is reached, all the characters saved in the buffer up to that point are
76thrown away without notice.
77.Ss "Session Management (Job Control)"
78A control terminal will distinguish one of the process groups in the session
79associated with it to be the foreground process group.
80All other process
81groups in the session are designated as background process groups.
82This foreground process group plays a special role in handling signal-generating
83input characters, as discussed below.
84By default, when a controlling terminal
85is allocated, the controlling process's process group is assigned as
86foreground process group.
87.Pp
88Background process groups in the controlling process's session are subject to a
89job control line discipline when they attempt to access their controlling
90terminal.
91Process groups can be sent signals that will cause them to stop,
92unless they have made other arrangements.
93An exception is made for members of
94orphaned process groups.
95.Pp
96An orphaned process group is one where the process group (see
97.Xr getpgid 2 )
98has no members with a parent in a different process group but sharing the same
99controlling terminal.
100When a member of an orphaned process group attempts to
101access its controlling terminal, EIO is returned because there would be no way
102to restart the process if it were stopped on one of these signals.
103.Pp
104If a member of a background process group attempts to read its controlling
105terminal, its process group will be sent a
106.Dv SIGTTIN
107signal, which will
108normally cause the members of that process group to stop.
109If, however, the
110process is ignoring or holding
111.Dv SIGTTIN ,
112or is a member of an orphaned
113process group, the read will fail with
114.Va errno
115set to
116.Er EIO ,
117and no signal is sent.
118.Pp
119If a member of a background process group attempts to write its controlling
120terminal and the
121.Dv TOSTOP
122bit is set in the
123.Fa c_lflag
124field, its process group is sent a
125.Dv SIGTTOU
126signal, which will normally cause the
127members of that process group to stop.
128If, however, the process is ignoring or
129holding
130.Dv SIGTTOU ,
131the write will succeed.
132If the process is not ignoring
133or holding
134.Dv SIGTTOU
135and is a member of an orphaned process group, the
136write will fail with
137.Va errno
138set to
139.Er EIO ,
140and no signal will be sent.
141.Pp
142If
143.Dv TOSTOP
144is set and a member of a background process group attempts to
145.Fn ioctl
146its controlling terminal, and that
147.Fn ioctl
148will modify terminal parameters (for example,
149.Dv TCSETA ,
150.Dv TCSETAW ,
151.Dv TCSETAF ,
152or
153.Dv TIOCSPGRP ) ,
154its process group will be sent a
155.Dv SIGTTOU
156signal, which will normally cause the members of that process group to stop.
157If, however, the process is ignoring or holding
158.Dv SIGTTOU ,
159the ioctl will succeed.
160If the process is not ignoring or holding
161.Dv SIGTTOU
162and is a member of an orphaned
163process group, the write will fail with
164.Va errno
165set to
166.Er EIO ,
167and no signal will be sent.
168.Ss "Canonical Mode Input Processing"
169Normally, terminal input is processed in units of lines.
170A line is delimited by
171a newline
172.Po
173.Sy ASCII LF
174.Pc
175character, an end-of-file
176.Po
177.Sy ASCII EOT
178.Pc
179character, or an end-of-line character.
180This means that a program attempting to
181read will block until an entire line has been typed.
182Also, no matter how many
183characters are requested in the read call, at most one line will be returned.
184It is not necessary, however, to read a whole line at once; any number of
185characters may be requested in a read, even one, without losing information.
186.Pp
187During input, erase, erase2, and kill processing is normally done.
188The
189.Sy ERASE
190and
191.Sy ERASE2
192character (by default, the character
193.Sy DEL
194for
195.Sy ERASE
196and
197.Sy Control-h
198for
199.Sy ERASE2 )
200erases the last character typed.
201The
202.Sy WERASE
203character (the character
204.Sy Control-w )
205erases the
206last "word" typed in the current input line (but not any preceding spaces or
207tabs).
208A
209.Dq word
210is defined as a sequence of non-blank characters, with tabs counted as blanks.
211None of
212.Sy ERASE
213or
214.Sy ERASE2
215or
216.Sy WERASE
217will erase beyond the beginning of the line.
218The
219.Sy KILL
220character (by default,
221the character
222.Sy NAK )
223kills (deletes) the entire input line, and optionally
224outputs a newline character.
225All these characters operate on a key stroke basis,
226independent of any backspacing or tabbing that may have been done.
227The
228.Sy REPRINT
229character (the character
230.Sy Control-r )
231prints a newline followed by all characters that have not been read.
232Reprinting also occurs automatically if
233characters that would normally be erased from the screen are fouled by program
234output.
235The characters are reprinted as if they were being echoed;
236consequently, if
237.Dv ECHO
238is not set, they are not printed.
239.Pp
240The
241.Sy ERASE ,
242.Sy ERASE2 ,
243and
244.Sy KILL
245characters may be entered literally by preceding them with the escape character.
246In this case, the escape character is not read.
247The erase, erase2, and kill characters may be changed.
248.Ss "Non-canonical Mode Input Processing"
249In non-canonical mode input processing, input characters are not assembled into
250lines, and erase and kill processing does not occur.
251The
252.Sy MIN
253and
254.Sy TIME
255values are used to determine how to process the characters received.
256.Pp
257.Sy MIN
258represents the minimum number of characters that should be received
259when the read is satisfied (that is, when the characters are returned to the
260user).
261.Sy TIME
262is a timer of 0\&.10-second granularity that is used to timeout
263bursty and short-term data transmissions.
264The four possible values for
265.Sy MIN
266and
267.Sy TIME
268and their interactions are described below.
269.Bl -tag -width "Case A: Min > 0, Time > 0"
270.It Sy Case A: MIN > 0, TIME > 0
271In this case,
272.Sy TIME
273serves as an intercharacter timer and is activated
274after the first character is received.
275Since it is an intercharacter timer, it
276is reset after a character is received.
277The interaction between
278.Sy MIN
279and
280.Sy TIME
281is as follows: as soon as one character is received, the
282intercharacter timer is started.
283If
284.Sy MIN
285characters are received before
286the intercharacter timer expires (note that the timer is reset upon receipt of
287each character), the read is satisfied.
288If the timer expires before
289.Sy MIN
290characters are received, the characters received to that point are returned to
291the user.
292Note that if
293.Sy TIME
294expires, at least one character will be
295returned because the timer would not have been enabled unless a character was
296received.
297In this case (MIN > 0, TIME > 0), the read sleeps until the
298.Sy MIN
299and
300.Sy TIME
301mechanisms are activated by the receipt of the first character.
302If the number of characters read is less than the number of characters
303available, the timer is not reactivated and the subsequent read is satisfied
304immediately.
305.It Sy Case B: MIN > 0, TIME = 0
306In this case, since the value of
307.Sy TIME
308is zero, the timer plays no role
309and only
310.Sy MIN
311is significant.
312A pending read is not satisfied until
313.Sy MIN
314characters are received (the pending read sleeps until
315.Sy MIN
316characters are received).
317A program that uses this case to read record based
318terminal
319.Sy I/O
320may block indefinitely in the read operation.
321.It Sy Case C: MIN = 0, TIME > 0
322In this case, since
323.Sy MIN
3240,
325.Sy TIME
326no longer represents an
327intercharacter timer: it now serves as a read timer that is activated as soon
328as a
329.Xr read  2
330is done.
331A read is satisfied as soon as a single character is
332received or the read timer expires.
333Note that, in this case, if the timer
334expires, no character is returned.
335If the timer does not expire, the only way
336the read can be satisfied is if a character is received.
337In this case, the
338read will not block indefinitely waiting for a character; if no character is
339received within
340.Sy TIME
341*\&.10 seconds after the read is initiated, the read
342returns with zero characters.
343.It Sy Case D: MIN = 0, TIME = 0
344In this case, return is immediate.
345The minimum of either the number of
346characters requested or the number of characters currently available is
347returned without waiting for more characters to be input.
348.El
349.Ss "Comparing Different Cases of MIN, TIME Interaction"
350Some points to note about
351.Sy MIN
352and
353.Sy TIME :
354.Bl -bullet -offset 2n
355.It
356In the following explanations, note that the interactions of
357.Sy MIN
358and
359.Sy TIME
360are not symmetric.
361For example, when
362.Sy MIN
363> 0 and
364.Sy TIME
365= 0,
366.Sy TIME
367has no effect.
368However, in the opposite case, where
369.Sy MIN
370= 0 and
371.Sy TIME
372> 0, both
373.Sy MIN
374and
375.Sy TIME
376play a role in that
377.Sy MIN
378is satisfied with the receipt of a single character.
379.It
380Also note that in case A
381.Po
382.Sy MIN
383> 0,
384.Sy TIME
385> 0
386.Pc ,
387.Sy TIME
388represents
389an intercharacter timer, whereas in case C
390.Po
391.Sy MIN
392= 0,
393.Sy TIME
394> 0
395.Pc ,
396.Sy TIME
397represents a read timer.
398.El
399.Pp
400These two points highlight the dual purpose of the
401.Sy MIN/TIME
402feature.
403Cases A and B, where
404.Sy MIN
405> 0, exist to handle burst mode activity (for
406example, file transfer programs), where a program would like to process at
407least
408.Sy MIN
409characters at a time.
410In case A, the intercharacter timer is
411activated by a user as a safety measure; in case B, the timer is turned off.
412.Pp
413Cases C and D exist to handle single character, timed transfers.
414These cases
415are readily adaptable to screen-based applications that need to know if a
416character is present in the input queue before refreshing the screen.
417In case
418C, the read is timed, whereas in case D, it is not.
419.Pp
420Another important note is that
421.Sy MIN
422is always just a minimum.
423It does not
424denote a record length.
425For example, if a program does a read of 20 bytes,
426.Sy MIN
427is 10, and 25 characters are present, then 20 characters will be
428returned to the user.
429.Ss "Writing Characters"
430When one or more characters are written, they are transmitted to the terminal
431as soon as previously written characters have finished typing.
432nputt characters
433are echoed as they are typed if echoing has been enabled.
434If a process produces
435characters more rapidly than they can be typed, it will be suspended when its
436output queue exceeds some limit.
437When the queue is drained down to some
438threshold, the program is resumed.
439.Ss "Special Characters"
440Certain characters have special functions on input.
441These functions and their default character values are summarized as follows:
442.Bl -tag -width REPRINT
443.It Sy INTR
444(Control-c or
445.Sy ASCII ETX )
446generates a
447.Dv SIGINT
448signal.
449.Dv SIGINT
450is sent to all foreground processes associated with the controlling terminal.
451Normally, each such process is forced to terminate, but arrangements may be
452made either to ignore the signal or to receive a trap to an agreed upon
453location.
454(See
455.Xr signal.h 3HEAD ) .
456.It Sy QUIT
457(Control-| or
458.Sy ASCII FS )
459generates a
460.Dv SIGQUIT
461signal.
462Its treatment
463is identical to the interrupt signal except that, unless a receiving process
464has made other arrangements, it will not only be terminated but a core image
465file (called
466.Pa core )
467will be created in the current working directory.
468.It Sy ERASE
469(DEL) erases the preceding character.
470It does not erase beyond
471the start of a line, as delimited by a
472.Sy NL ,
473.Sy EOF ,
474.Sy EOL ,
475or
476.Sy EOL2
477character.
478.It Sy ERASE2
479(Control-h or
480.Sy ASCII BS )
481erases the preceding character, with behaviour identical to that of ERASE.
482.It Sy WERASE
483(Control-w or
484.Sy ASCII ETX )
485erases the preceding
486.Dq word .
487It does not erase beyond the start of a line, as delimited by a
488.Sy NL ,
489.Sy EOF ,
490.Sy EOL ,
491or
492.Sy EOL2
493character.
494.It Sy KILL
495(Control-u or
496.Sy ASCII NAK )
497deletes the entire line, as delimited by a
498.Sy NL ,
499.Sy EOF ,
500.Sy EOL ,
501or
502.Sy EOL2
503character.
504.It Sy REPRINT
505(Control-r or
506.Sy ASCII DC2 )
507reprints all characters, preceded by a newline, that have not been read.
508.It Sy EOF
509(Control-d or
510.Sy ASCII EOT )
511may be used to generate an end-of-file from a terminal.
512When received, all the characters waiting to be read are immediately
513passed to the program, without waiting for a newline, and the
514.Sy EOF
515is discarded.
516Thus, if no characters are waiting (that is, the
517.Sy EOF
518occurred
519at the beginning of a line) zero characters are passed back, which is the
520standard end-of-file indication.
521Unless escaped, the
522.Sy EOF
523character is not
524echoed.
525Because
526.Sy EOT
527is the default
528.Sy EOF
529character, this prevents
530terminals that respond to
531.Sy EOT
532from hanging up.
533.It Sy NL
534.Pq Sy ASCII LF
535is the normal line delimiter.
536It cannot be changed or escaped.
537.It Sy EOL
538.Pq Sy ASCII NULL
539is an additional line delimiter, like
540.Sy NL .
541It is not normally used.
542.It Sy EOL2
543is another additional line delimiter.
544.It Sy SWTCH
545(Control-z or
546.Sy ASCII EM )
547Header file symbols related to this special
548character are present for compatibility purposes only and the kernel takes no
549special action on matching SWTCH (except to discard the character).
550.It Sy SUSP
551(Control-z or
552.Sy ASCII SUB )
553generates a
554.Dv SIGTSTP
555signal.
556.Dv SIGTSTP
557stops all processes in the foreground process group for that terminal.
558.It Sy DSUSP
559(Control-y or
560.Sy ASCII EM ) .
561It generates a
562.Dv SIGTSTP
563signal as
564.Sy SUSP
565does, but the signal is sent when a process in the foreground
566process group attempts to read the
567.Sy DSUSP
568character, rather than when it is typed.
569.It Sy STOP
570(Control-s or
571.Sy ASCII DC3 )
572can be used to suspend output temporarily.
573It is useful with
574.Sy CRT
575terminals to prevent output from disappearing before it can be read.
576While output is suspended,
577.Sy STOP
578characters are ignored and
579not read.
580.It Sy START
581(Control-q or
582.Sy ASCII DC1 )
583is used to resume output.
584Output has been suspended by a
585.Sy STOP
586character.
587While output is not suspended,
588.Sy START
589characters are ignored and not read.
590.It Sy DISCARD
591(Control-o or
592.Sy ASCII SI )
593causes subsequent output to be discarded.
594Output is discarded until another
595.Sy DISCARD
596character is typed, more input
597arrives, or the condition is cleared by a program.
598.It Sy STATUS
599(Control-t or
600.Sy ASCII DC4 )
601generates a
602.Dv SIGINFO
603signal.
604Processes with a handler will output status information when they receive
605.Dv SIGINFO ,
606for
607example,
608.Xr dd 8 .
609If a process does not have a
610.Dv SIGINFO
611handler, the
612signal will be ignored.
613.It Sy LNEXT
614(Control-v or
615.Sy ASCII SYN )
616causes the special meaning of the next character to be ignored.
617This works for all the special characters mentioned above.
618It
619allows characters to be input that would otherwise be interpreted by the system
620(for example
621.Sy KILL ,
622.Sy QUIT ) .
623The character values for
624.Sy INTR ,
625.Sy QUIT ,
626.Sy ERASE ,
627.Sy ERASE2 ,
628.Sy WERASE ,
629.Sy KILL ,
630.Sy REPRINT ,
631.Sy EOF ,
632.Sy EOL ,
633.Sy EOL2 ,
634.Sy SWTCH ,
635.Sy SUSP ,
636.Sy DSUSP ,
637.Sy STOP ,
638.Sy START ,
639.Sy DISCARD ,
640.Sy STATUS ,
641and
642.Sy LNEXT
643may be changed to suit individual tastes.
644If the value of a special control character
645is
646.Dv _POSIX_VDISABLE
647(0), the function of that special control character is disabled.
648The
649.Sy ERASE ,
650.Sy ERASE2 ,
651.Sy KILL ,
652and
653.Sy EOF
654characters may be
655escaped by a preceding backslash (\e) character, in which case no special
656function is done.
657Any of the special characters may be preceded by the
658.Sy LNEXT
659character, in
660which case no special function is done.
661.El
662.Ss "Modem Disconnect"
663When a modem disconnect is detected, a
664.Dv SIGHUP
665signal is sent to the
666terminal's controlling process.
667Unless other arrangements have been made, these
668signals cause the process to terminate.
669If
670.Dv SIGHUP
671is ignored or caught,
672any subsequent read returns with an end-of-file indication until the terminal
673is closed.
674.Pp
675If the controlling process is not in the foreground process group of the
676terminal, a
677.Dv SIGTSTP
678is sent to the terminal's foreground process group.
679Unless other arrangements have been made, these signals cause the processes to
680stop.
681.Pp
682Processes in background process groups that attempt to access the controlling
683terminal after modem disconnect while the terminal is still allocated to the
684session will receive appropriate
685.Dv SIGTTOU
686and
687.Dv SIGTTIN
688signals.
689Unless other arrangements have been made, this signal causes the processes to
690stop.
691.Pp
692The controlling terminal will remain in this state until it is reinitialized
693ithh a successful open by the controlling process, or deallocated by the
694controlling process.
695.Ss "Terminal Parameters"
696The parameters that control the behavior of devices and modules providing the
697.Vt termios
698interface are specified by the
699.Vt termios
700structure defined by
701.In termios.h .
702Several
703.Xr ioctl 2
704system calls that fetch or change
705these parameters use this structure that contains the following members:
706.Bd -literal -offset 2n
707tcflag_t	c_iflag;	/* input modes */
708tcflag_t	c_oflag;	/* output modes */
709tcflag_t	c_cflag;	/* control modes */
710tcflag_t	c_lflag;	/* local modes */
711cc_t		c_cc[NCCS];	/* control chars */
712.Ed
713.Pp
714The special control characters are defined by the array
715.Fa c_cc .
716The symbolic name
717.Dv NCCS
718is the size of the Control-character array and is also
719defined by
720.In termios.h .
721The relative positions, subscript names, and
722typical default values for each function are as follows:
723.Bl -column "Relative Position" "Subscript Name" "Typical Default Value"
724.It Relative Position Ta Subscript Name Ta Typical Default Value
725.It 0 Ta Dv VINTR Ta Sy ETX
726.It 1 Ta Dv VQUIT Ta Sy FS
727.It 2 Ta Dv VERASE Ta Sy DEL
728.It 3 Ta Dv VKILL Ta Sy NAK
729.It 4 Ta Dv VEOF Ta Sy EOT
730.It 5 Ta Dv VEOL Ta Sy NUL
731.It 6 Ta Dv VEOL2 Ta Sy NUL
732.It 7 Ta Dv VWSTCH Ta Sy NUL
733.It 8 Ta Dv VSTART Ta Sy NUL
734.It 9 Ta Dv VSTOP Ta Sy DC3
735.It 10 Ta Dv VSUSP Ta Sy SUB
736.It 11 Ta Dv VDSUSP Ta Sy EM
737.It 12 Ta Dv VREPRINT Ta Sy DC2
738.It 13 Ta Dv VDISCARD Ta Sy SI
739.It 14 Ta Dv VWERASE Ta Sy ETB
740.It 15 Ta Dv VLNEXT Ta Sy SYN
741.It 16 Ta Dv VSTATUS Ta Sy DC4
742.It 17 Ta Dv VERASE2 Ta Sy BS
743.It 18-19 Ta Reserved Ta
744.El
745.Ss "Input Modes"
746The
747.Fa c_iflag
748field describes the basic terminal input control:
749.Pp
750.Bl -tag -width "IMAXBEL" -offset 2n -compact
751.It Dv IGNBRK
752Ignore break condition.
753.It Dv BRKINT
754Signal interrupt on break.
755.It Dv IGNPAR
756Ignore characters with parity errors.
757.It Dv PARMRK
758Mark parity errors.
759.It Dv INPCK
760Enable input parity check.
761.It Dv ISTRIP
762Strip character.
763.It Dv INLCR
764Map NL to CR on input.
765.It Dv IGNCR
766Ignore CR.
767.It Dv ICRNL
768Map CR to NL on input.
769.It Dv IUCLC
770Map upper-case to lower-case on input.
771.It Dv IXON
772Enable start/stop output control.
773.It Dv IXANY
774Enable any character to restart output.
775.It Dv IXOFF
776Enable start/stop input control.
777.It Dv IMAXBEL
778Echo
779.Sy BEL
780on input line too long.
781.El
782.Pp
783If
784.Dv IGNBRK
785is set, a break condition (a character framing error with data
786all zeros) detected on input is ignored, that is, not put on the input queue
787and therefore not read by any process.
788If
789.Dv IGNBRK
790is not set and
791.Dv BRKINT
792is set, the break condition shall flush the input and output
793queues and if the terminal is the controlling terminal of a foreground process
794group, the break condition generates a single
795.Dv SIGINT
796signal to that
797foreground process group.
798If neither
799.Dv IGNBRK
800nor
801.Dv BRKINT
802is set, a
803break condition is read as a single
804.Ql \e0
805.Pq Sy ASCII NULL
806character, or if
807.Dv PARMRK
808is set, as
809.Ql \e377 ,
810.Ql \e0 ,
811.Em c ,
812where
813.Ql \e377
814is a single character
815with value 377 octal (0xff hex, 255 decimal),
816.Ql \e0
817is a single character with value
818.Sy 0 ,
819and
820.Em c
821is the errored character received.
822.Pp
823If
824.Dv IGNPAR
825is set, a byte with framing or parity errors (other than
826break) is ignored.
827.Pp
828If
829.Dv PARMRK
830is set, and
831.Dv IGNPAR
832is not set, a byte with a framing or
833parity error (other than break) is given to the application as the
834three-character sequence:
835.Ql \e377 ,
836.Ql \e0 ,
837c, where
838.Ql \e377
839is a single character with value 377 octal (0xff hex, 255 decimal),
840.Ql \e0
841is a single character with value 0, and c is the errored character received.
842To avoid ambiguity in this case, if
843.Dv ISTRIP
844is not set, a valid character
845of
846.Ql \e377
847is given to the application as
848.Ql \e377 .
849If neither
850.Dv IGNPAR
851nor
852.Dv PARMRK
853is set, a framing or parity error (other than break) is given to
854the application as a single
855.Ql \e0
856.Po
857.Sy ASCII NULL
858.Pc
859character.
860.Pp
861If
862.Dv INPCK
863is set, input parity checking is enabled.
864If
865.Dv INPCK
866is not
867set, input parity checking is disabled.
868This allows output parity generation
869without input parity errors.
870Note that whether input parity checking is
871enabled or disabled is independent of whether parity detection is enabled or
872disabled.
873If parity detection is enabled but input parity checking is
874disabled, the hardware to which the terminal is connected will recognize the
875parity bit, but the terminal special file will not check whether this is set
876correctly or not.
877.Pp
878If
879.Dv ISTRIP
880is set, valid input characters are first stripped to seven
881bits, otherwise all eight bits are processed.
882.Pp
883If
884.Dv INLCR
885is set, a received
886.Sy NL
887character is translated into a
888.Sy CR
889character.
890If
891.Dv IGNCR
892is set, a received
893.Sy CR
894character is ignored (not read).
895Otherwise, if
896.Dv ICRNL
897is set, a received
898.Sy CR
899character is translated into a
900.Sy NL
901character.
902.Pp
903If
904.Dv IUCLC
905is set, a received upper case, alphabetic character is
906translated into the corresponding lower case character.
907.Pp
908If
909.Dv IXON
910is set, start/stop output control is enabled.
911A received
912.Sy STOP
913character suspends output and a received
914.Sy START
915character
916restarts output.
917The
918.Sy STOP
919and
920.Sy START
921characters will not be read,
922but will merely perform flow control functions.
923If
924.Dv IXANY
925is set, any
926input character restarts output that has been suspended.
927.Pp
928If
929.Dv IXOFF
930is set, the system transmits a
931.Sy STOP
932character when the
933input queue is nearly full, and a
934.Sy START
935character when enough input has
936been read so that the input queue is nearly empty again.
937.Pp
938If
939.Dv IMAXBEL
940is set, the
941.Sy ASCII BEL
942character is echoed if the input stream overflows.
943Further input is not stored, but any input already present in
944the input stream is not disturbed.
945If
946.Dv IMAXBEL
947is not set, no
948.Sy BEL
949character is echoed, and all input present in the input queue is discarded if
950the input stream overflows.
951.Ss "Output Modes"
952The
953.Fa c_oflag
954field specifies the system treatment of output:
955.Pp
956.Bl -tag -width ONLRET -offset 2n -compact
957.It Dv OPOST
958Post-process output.
959.It Dv OLCUC
960Map lower case to upper on output.
961.It Dv ONLCR
962Map NL to CR-NL on output.
963.It Dv OCRNL
964Map CR to NL on output.
965.It Dv ONOCR
966No
967.Sy CR
968output at column 0.
969.It Dv ONLRET
970.Sy NL
971performs
972.Sy CR
973function.
974.It Dv OFILL
975Use fill characters for delay.
976.It Dv OFDEL
977Fill is
978.Sy DEL ,
979else
980.Sy INULL .
981.It Dv NLDLY
982Select newline delays:
983.Bl -tag -width NL0 -compact -offset 2n
984.It Sy NL0
985.It Sy NL1
986.El
987.It Dv CRDLY
988Select carriage-return delays:
989.Bl -tag -width CR0 -compact -offset 2n
990.It Dv CR0
991.It Dv CR1
992.It Dv CR2
993.It Dv CR3
994.El
995.It Dv TABDLY
996Select horizontal tab delays or tab expansion:
997.Bl -tag -width XTABS -compact -offset 2n
998.It Dv TAB0
999.It Dv TAB1
1000.It Dv TAB2
1001.It Dv TAB3
1002Expand tabs to spaces
1003.It Dv XTABS
1004Expand tabs to spaces
1005.El
1006.It Dv BSDLY
1007Select backspace delays:
1008.Bl -tag -width BS0 -offset 2n -compact
1009.It Dv BS0
1010.It Dv BS1
1011.El
1012.It Dv VTDLY
1013Select vertical tab delays:
1014.Bl -tag -width VT0 -offset 2n -compact
1015.It Dv VT0
1016.It Dv VT1
1017.El
1018.It Dv FFDLY
1019Select form feed delays:
1020.Bl -tag -width FF0 -offset 2n -compact
1021.It Dv FF0
1022.It Dv FF1
1023.El
1024.El
1025.Pp
1026If
1027.Dv OPOST
1028is set, output characters are post-processed as indicated by the
1029remaining flags; otherwise, characters are transmitted without change.
1030.Pp
1031If
1032.Dv OLCUC
1033is set, a lower case alphabetic character is transmitted as the
1034corresponding upper case character.
1035This function is often used in conjunction
1036with
1037.Dv IUCLC .
1038.Pp
1039If
1040.Dv ONLCR
1041is set, the
1042.Sy NL
1043character is transmitted as the
1044.Sy CR-NL
1045character pair.
1046If
1047.Dv OCRNL
1048is set, the
1049.Sy CR
1050character is transmitted as the
1051.Sy NL
1052character.
1053If
1054.Dv ONOCR
1055is set, no
1056.Sy CR
1057character is transmitted when at column 0 (first position).
1058If
1059.Dv ONRET
1060is set, the
1061.Sy NL
1062character is assumed to do the carriage-return function; the column
1063pointer is set to 0 and the delays specified for
1064.Sy CR
1065are used.
1066Otherwise, the
1067.Sy NL
1068character is assumed to do just the line-feed function; the column
1069pointer remains unchanged.
1070The column pointer is also set to 0 if the
1071.Sy CR
1072character is actually transmitted.
1073.Pp
1074The delay bits specify how long transmission stops to allow for mechanical or
1075other movement when certain characters are sent to the terminal.
1076In all cases, a value of 0 indicates no delay.
1077If
1078.Dv OFILL
1079is set, fill characters are transmitted for delay instead of a timed delay.
1080This is useful for high baud rate terminals that need only a minimal delay.
1081If
1082.Dv OFDEL
1083is set, the
1084fill character is
1085.Sy DEL ;
1086otherwise it is
1087.Sy NULL .
1088.Pp
1089If a form-feed or vertical-tab delay is specified, it lasts for about 2
1090seconds.
1091.Pp
1092Newline delay lasts about 0\&.10 seconds.
1093If
1094.Dv ONLRET
1095is set, the carriage-return delays are used instead of the newline delays.
1096If
1097.Dv OFILL
1098is set, two fill characters are transmitted.
1099.Pp
1100Carriage-return delay type 1 is dependent on the current column position, type
11012 is about 0\&.10 seconds, and type 3 is about 0\&.15 seconds.
1102If
1103.Dv OFILL
1104is set, delay type 1 transmits two fill characters, and type 2 transmits four
1105fill characters.
1106.Pp
1107Horizontal-tab delay type 1 is dependent on the current column position.
1108Type 2 is about 0\&.10 seconds.
1109Type 3 specifies that tabs are to be expanded into spaces.
1110If
1111.Dv OFILL
1112is set, two fill characters are transmitted for any delay.
1113.Pp
1114Backspace delay lasts about 0\&.05 seconds.
1115If
1116.Dv OFILL
1117is set, one fill character is transmitted.
1118.Pp
1119The actual delays depend on line speed and system load.
1120.Ss "Control Modes"
1121The
1122.Fa c_cflag
1123field describes the hardware control of the terminal:
1124.Bl -tag -width CIBAUDEXT -offset 2n
1125.It Dv CBAUD
1126Baud rate:
1127.Bl -tag -width B4000000 -compact
1128.It Dv B0
1129Hang up
1130.It Dv B50
113150 baud
1132.It Dv B75
113375 baud
1134.It Dv B110
1135110 baud
1136.It Dv B134
1137134 baud
1138.It Dv B150
1139150 baud
1140.It Dv B200
1141200 baud
1142.It Dv B300
1143300 baud
1144.It Dv B600
1145600 baud
1146.It Dv B1200
11471200 baud
1148.It Dv B1800
11491800 baud
1150.It Dv B2400
11512400 baud
1152.It Dv B4800
11534800 baud
1154.It Dv B9600
11559600 baud
1156.It Dv B19200
115719200 baud
1158.It Dv B38400
115938400 baud
1160.It Dv B57600
116157600 baud
1162.It Dv B76800
116376800 baud
1164.It Dv B115200
1165115200 baud
1166.It Dv B153600
1167153600 baud
1168.It Dv B230400
1169230400 baud
1170.It Dv B307200
1171307200 baud
1172.It Dv B460800
1173460800 baud
1174.It Dv B921600
1175921600 baud
1176.It Dv B1000000
11771000000 baud
1178.It Dv B1152000
11791152000 baud
1180.It Dv B1500000
11811500000 baud
1182.It Dv B2000000
11832000000 baud
1184.It Dv B2500000
11852500000 baud
1186.It Dv B3000000
11873000000 baud
1188.It Dv B3500000
11893500000 baud
1190.It Dv B4000000
11914000000 baud
1192.El
1193.It Dv CSIZE
1194Character size:
1195.Bl -tag -width CIBAUDEXT -compact
1196.It Dv CS5
11975 bits
1198.It Dv CS6
11996 bits
1200.It Dv CS7
12017 bits
1202.It Dv CS8
12038 bits
1204.It Dv CSTOPB
1205Send two stop bits, else one
1206.It Dv CREAD
1207Enable receiver
1208.It Dv PARENB
1209Parity enable
1210.It Dv PARODD
1211Odd parity, else even
1212.It Dv HUPCL
1213Hang up on last close
1214.It Dv CLOCAL
1215Local line, else dial-up
1216.It Dv CIBAUD
1217Input baud rate, if different from output rate
1218.It Dv PAREXT
1219Extended parity for mark and space parity
1220.It Dv CRTSXOFF
1221Enable inbound hardware flow control
1222.It Dv CRTSCTS
1223Enable outbound hardware flow control
1224.It Dv CBAUDEXT
1225Bit to indicate output speed > B38400
1226.It Dv CIBAUDEXT
1227Bit to indicate input speed > B38400
1228.El
1229.El
1230.Pp
1231The
1232.Dv CBAUD
1233bits together with the
1234.Dv CBAUDEXT
1235bit specify the output baud rate.
1236To retrieve the output speed from the
1237.Vt termios
1238structure pointed to by
1239.Fa termios_p
1240see the following code segment.
1241.Bd -literal -offset 2n
1242speed_t ospeed;
1243if (termios_p->c_cflag & CBAUDEXT)
1244 ospeed = (termios_p->c_cflag & CBAUD) + CBAUD + 1;
1245else
1246 ospeed = termios_p->c_cflag & CBAUD;
1247.Ed
1248.Pp
1249To store the output speed in the termios structure pointed to by
1250.Fa termios_p
1251see the following code segment.
1252.Bd -literal -offset 2n
1253speed_t ospeed;
1254if (ospeed > CBAUD) {
1255 termios_p->c_cflag |= CBAUDEXT;
1256 ospeed -= (CBAUD + 1);
1257} else {
1258 termios_p->c_cflag &= ~CBAUDEXT;
1259}
1260termios_p->c_cflag =
1261  (termios_p->c_cflag & ~CBAUD) | (ospeed & CBAUD);
1262.Ed
1263.Pp
1264The zero baud rate,
1265.Dv B0 ,
1266is used to hang up the connection.
1267If
1268.Dv B0
1269is specified, the data-terminal-ready signal is not asserted.
1270Normally, this disconnects the line.
1271.Pp
1272If the
1273.Dv CIBAUDEXT
1274or
1275.Dv CIBAUD
1276bits are not zero, they specify the input baud rate, with the
1277.Dv CBAUDEXT
1278and
1279.Dv CBAUD
1280bits specifying the output baud rate; otherwise, the output and input baud
1281rates are both specified by the
1282.Dv CBAUDEXT
1283and
1284.Dv CBAUD
1285bits.
1286The values for the
1287.Dv CIBAUD
1288bits are the same as the values for the
1289.Dv CBAUD
1290bits, shifted left
1291.Dv IBSHIFT
1292bits.
1293For any particular hardware, impossible speed changes are
1294ignored.
1295To retrieve the input speed in the
1296.Vt termios
1297structure pointed to
1298by
1299.Fa termios_p
1300see the following code segment.
1301.Bd -literal -offset 2n
1302speed_t ispeed;
1303if (termios_p->c_cflag & CIBAUDEXT) {
1304 ispeed = ((termios_p->c_cflag & CIBAUD) >> IBSHIFT)
1305 + (CIBAUD >> IBSHIFT) + 1;
1306} else {
1307 ispeed = (termios_p->c_cflag & CIBAUD) >> IBSHIFT;
1308}
1309.Ed
1310.Pp
1311To store the input speed in the
1312.Vt termios
1313structure pointed to by
1314.Fa termios_p
1315see the following code segment.
1316.Bd -literal -offset 2n
1317speed_t ispeed;
1318if (ispeed == 0) {
1319 ispeed = termios_p->c_cflag & CBAUD;
1320 if (termios_p->c_cflag & CBAUDEXT)
1321     ispeed += (CBAUD + 1);
1322}
1323if ((ispeed << IBSHIFT) > CIBAUD) {
1324  termios_p->c_cflag |= CIBAUDEXT;
1325  ispeed -= ((CIBAUD >> IBSHIFT) + 1);
1326} else {
1327  termios_p->c_cflag &= ~CIBAUDEXT;
1328}
1329termios_p->c_cflag =
1330  (termios_p->c_cflag & ~CIBAUD) | ((ispeed << IBSHIFT) & CIBAUD);
1331.Ed
1332.Pp
1333The
1334.Dv CSIZE
1335bits specify the character size in bits for both transmission and reception.
1336This size does not include the parity bit, if any.
1337If
1338.Dv CSTOPB
1339is set, two stop bits are used; otherwise, one stop bit is used.
1340For example, at 110 baud, two stops bits are required.
1341.Pp
1342If
1343.Dv PARENB
1344is set, parity generation and detection is enabled, and a
1345parity bit is added to each character.
1346If parity is enabled, the
1347.Dv PARODD
1348flag specifies odd parity if set; otherwise, even parity is used.
1349.Pp
1350If
1351.Dv CREAD
1352is set, the receiver is enabled.
1353Otherwise, no characters are received.
1354.Pp
1355If
1356.Dv HUPCL
1357is set, the line is disconnected when the last process with the
1358line open closes it or terminates.
1359That is, the data-terminal-ready signal is not asserted.
1360.Pp
1361If
1362.Dv CLOCAL
1363is set, the line is assumed to be a local, direct connection
1364with no modem control; otherwise, modem control is assumed.
1365.Pp
1366If
1367.Dv CRTSXOFF
1368is set, inbound hardware flow control is enabled.
1369.Pp
1370If
1371.Dv CRTSCTS
1372is set, outbound hardware flow control is enabled.
1373.Pp
1374The four possible combinations for the state of
1375.Dv CRTSCTS
1376and
1377.Dv CRTSXOFF
1378bits and their interactions are described below.
1379.Bl -tag -width "Case C:"
1380.It Sy Case A :
1381.Dv CRTSCTS
1382off,
1383.Dv CRTSXOFF
1384off.
1385In this case the hardware flow control is disabled.
1386.It Sy Case B :
1387.Dv CRTSCTS
1388on,
1389.Dv CRTSXOFF
1390off.
1391In this case only outbound hardware flow control is enabled.
1392The state of CTS signal is used to do outbound flow control.
1393It is expected that output will be suspended if CTS is low and resumed
1394when CTS is high.
1395.It Sy Case C :
1396.Dv CRTSCTS
1397off,
1398.Dv CRTSXOFF
1399on.
1400In this case only inbound hardware flow control is enabled.
1401The state of RTS signal is used to do inbound flow control.
1402It is expected that input will be suspended if RTS is low and resumed when RTS
1403is high.
1404.It Sy Case D :
1405.Dv CRTSCTS
1406on,
1407.Dv CRTSXOFF
1408on.
1409In this case both inbound and outbound hardware flow control are enabled.
1410Uses the state of CTS signal to do outbound
1411flow control and RTS signal to do inbound flow control.
1412.El
1413.Ss "Local Modes"
1414The
1415.Fa c_lflag
1416field of the argument structure is used by the line
1417discipline to control terminal functions.
1418The basic line discipline provides the following:
1419.Pp
1420.Bl -tag -offset 2n -width SIGTTOU -compact
1421.It Dv ISIG
1422Enable signals.
1423.It Dv ICANON
1424Canonical input (erase and kill processing).
1425.It Dv XCASE
1426Canonical upper/lower presentation.
1427.It Dv ECHO
1428Enable echo.
1429.It Dv ECHOE
1430Echo erase character as
1431.Sy BS Ns - Ns Sy SP Ns - Ns Sy BS
1432&.
1433.It Dv ECHOK
1434Echo
1435.Sy NL
1436after kill character.
1437.It Dv ECHONL
1438Echo
1439.Sy NL .
1440.It Dv NOFLSH
1441Disable flush after interrupt or quit.
1442.It Dv TOSTOP
1443Send
1444.It Dv SIGTTOU
1445for background output.
1446.It Dv ECHOCTL
1447Echo control characters as
1448.Em char ,
1449delete as ^?.
1450.It Dv ECHOPRT
1451Echo erase character as character erased.
1452.It Dv ECHOKE
1453.Sy BS Ns - Ns Sy SP Ns - Ns Sy BS
1454erase entire line on line kill.
1455.It Dv FLUSHO
1456Output is being flushed.
1457.It Dv PENDIN
1458Retype pending input at next read or input character.
1459.It Dv IEXTEN
1460Enable extended (implementation-defined) functions.
1461.El
1462.Pp
1463If
1464.Dv ISIG
1465is set, each input character is checked against the special
1466control characters
1467.Sy INTR ,
1468.Sy QUIT ,
1469.Sy SWTCH ,
1470.Sy SUSP ,
1471.Sy STATUS ,
1472and
1473.Sy DSUSP .
1474If an input character matches one of these control characters, the function
1475associated with that character is performed.
1476.Po
1477Note: If
1478.Sy SWTCH
1479is set and the character matches, the character is simply discarded.
1480No other action is taken.
1481.Pc
1482If
1483.Dv ISIG
1484is not set, no checking is done.
1485Thus, these special
1486input functions are possible only if
1487.Dv ISIG
1488is set.
1489.Pp
1490If
1491.Dv ICANON
1492is set, canonical processing is enabled.
1493This enables the erase
1494and kill edit functions, and the assembly of input characters into lines
1495delimited by
1496.Sy NL-c ,
1497.Sy EOF ,
1498.Sy EOL ,
1499and
1500.Sy EOL .
1501If
1502.Dv ICANON
1503is not set, read requests are satisfied directly from the input queue.
1504A read is not satisfied until at least
1505.Sy MIN
1506characters have been received or the timeout value
1507.Sy TIME
1508has expired between characters.
1509This allows fast bursts of input to be read efficiently while still allowing
1510single character input.
1511The time value represents tenths of seconds.
1512.Pp
1513If
1514.Dv XCASE
1515is set and
1516.Dv ICANON
1517is set, an upper case letter is
1518accepted on input if preceded by a backslash
1519.Ql \e
1520character, and is output preceded by a backslash
1521.Ql \e
1522character.
1523In this mode, the
1524following escape sequences are generated on output and accepted on input:
1525.Bl -column "FOR:" "USE:" -offset 2n
1526.It FOR: Ta USE:
1527.It ` Ta \e'
1528.It | Ta \e!
1529.It \(ap Ta \e^
1530.It { Ta \e(
1531.It } Ta \e)
1532.It \e Ta \e\e
1533.El
1534.Pp
1535For example, input A as \ea, \en as \e\en, and \eN as \e\e\en.
1536.Pp
1537If
1538.Dv ECHO
1539is set, characters are echoed as received.
1540.Pp
1541When
1542.Dv ICANON
1543is set, the following echo functions are possible.
1544.Bl -bullet -offset indent
1545.It
1546If
1547.Dv ECHO
1548and
1549.Dv ECHOE
1550are set, and
1551.Dv ECHOPRT
1552is not set, the
1553.Sy ERASE ,
1554.Sy ERASE2 ,
1555and
1556.Sy WERASE
1557characters are echoed as one or
1558more ASCII BS SP BS, which clears the last character(s) from a
1559.Sy CRT
1560screen.
1561.It
1562If
1563.Dv ECHO ,
1564.Dv ECHOPRT ,
1565and
1566.Dv IEXTEN
1567are set, the first
1568.Sy ERASE ,
1569.Sy ERASE2 ,
1570and
1571.Sy WERASE
1572character in a sequence echoes as a backslash
1573.Ql \e ,
1574followed by the characters being erased.
1575Subsequent
1576.Sy ERASE
1577and
1578.Sy WERASE
1579characters echo the characters being erased, in reverse order.
1580The
1581next non-erase character causes a
1582.Ql /
1583(slash) to be typed before it is echoed.
1584.Dv ECHOPRT
1585should be used for hard copy terminals.
1586.It
1587If
1588.Dv ECHOKE
1589and
1590.Dv IEXTEN
1591are set, the kill character is echoed by
1592erasing each character on the line from the screen (using the mechanism
1593selected by
1594.Dv ECHOE
1595and
1596.Dv ECHOPR ) .
1597.It
1598If
1599.Dv ECHOK
1600is set, and
1601.Dv ECHOKE
1602is not set, the
1603.Sy NL
1604character is
1605echoed after the kill character to emphasize that the line is deleted.
1606Note
1607that a
1608.Ql \e
1609(escape) character or an
1610.Sy LNEXT
1611character preceding the erase
1612or kill character removes any special function.
1613.It
1614If
1615.Dv ECHONL
1616is set, the
1617.Sy NL
1618character is echoed even if
1619.Dv ECHO
1620is not set.
1621This is useful for terminals set to local echo (so called
1622half-duplex).
1623.El
1624.Pp
1625If
1626.Dv ECHOCTL
1627and
1628.Dv IEXTEN
1629are set, all control characters (characters
1630with codes between 0 and 37 octal) other than
1631.Sy ASCII TAB ,
1632.Sy ASCII NL ,
1633the
1634.Sy START
1635character, and the
1636.Sy STOP
1637character,
1638.Sy ASCII CR ,
1639and
1640.Sy ASCII BS
1641are echoed as
1642.No ^ Ns Em X ,
1643where
1644.Em X
1645is the character given by adding
1646.Ql 100
1647octal to the code of the control character (so
1648that the character with octal code
1649.Ql 1
1650is echoed as
1651.No ^ Ns Sy A ) ,
1652and the
1653.Sy ASCII DEL
1654character,
1655with code
1656.Ql 177
1657octal, is echoed as
1658.No ^ Ns Sy \&? .
1659.Pp
1660If
1661.Dv NOFLSH
1662is set, the normal flush of the input and output queues
1663associated with the
1664.Sy INTR ,
1665.Sy QUIT ,
1666.Sy STATUS ,
1667and
1668.Sy SUSP
1669characters is not done.
1670This bit should be set when restarting system calls
1671that read from or write to a terminal
1672.Po
1673see
1674.Xr sigaction 2
1675.Pc .
1676.Pp
1677If
1678.Dv TOSTOP
1679and
1680.Dv IEXTEN
1681are set, the signal
1682.Dv SIGTTOU
1683is sent to
1684a process that tries to write to its controlling terminal if it is not in the
1685foreground process group for that terminal.
1686This signal normally stops the process.
1687Otherwise, the output generated by that process is output to the
1688current output stream.
1689Processes that are blocking or ignoring
1690.Dv SIGTTOU
1691signals are excepted and allowed to produce output, if any.
1692.Pp
1693If
1694.Dv FLUSHO
1695and
1696.Dv IEXTEN
1697are set, data written to the terminal is
1698discarded.
1699This bit is set when the
1700.Sy FLUSH
1701character is typed.
1702A program can cancel the effect of typing the
1703.Sy FLUSH
1704character by clearing
1705.Dv FLUSHO .
1706.Pp
1707If
1708.Dv PENDIN
1709and
1710.Dv IEXTEN
1711are set, any input that has not yet been read
1712is reprinted when the next character arrives as input.
1713.Dv PENDIN
1714is then
1715automatically cleared.
1716.Pp
1717If
1718.Dv IEXTEN
1719is set, the following implementation-defined functions are
1720enabled: special characters (
1721.Sy WERASE ,
1722.Sy REPRINT ,
1723.Sy DISCARD ,
1724and
1725.Sy LNEXT )
1726and local flags (
1727.Dv TOSTOP ,
1728.Dv ECHOCTL ,
1729.Dv ECHOPRT ,
1730.Dv ECHOKE ,
1731.Dv FLUSHO ,
1732and
1733.Dv PENDIN ) .
1734.Ss "Minimum and Timeout"
1735The
1736.Sy MIN
1737and
1738.Sy TIME
1739values were described previously, in the
1740subsection,
1741.Sy Non-canonical Mode Input Processing .
1742The initial value of
1743.Sy MIN
1744is 1, and the initial value of
1745.Sy TIME
1746is 0.
1747.Ss "Terminal Size"
1748The number of lines and columns on the terminal's display is specified in the
1749.Vt winsize
1750structure defined by
1751.In sys/termios.h
1752and includes the following members:
1753.Bd -literal -offset 2n
1754unsigned	short ws_row;  /* rows, in characters */
1755unsigned short	ws_col;        /* columns, in characters */
1756unsigned short	ws_xpixel;     /* horizontal size, in pixels */
1757unsigned short	ws_ypixel;     /* vertical size, in pixels */
1758.Ed
1759.Ss "Termio Structure"
1760The SunOS/SVR4
1761.Vt termio
1762structure is used by some
1763.Fn ioctl Ns s ;
1764it is defined by
1765.In sys/termio.h
1766and includes the following members:
1767.Bd -literal -offset 2n
1768unsigned	short	c_iflag;    /* input modes */
1769unsigned	short	c_oflag;    /* output modes */
1770unsigned	short	c_cflag;    /* control modes */
1771unsigned	short	c_lflag;    /* local modes */
1772char			c_line;     /* line discipline */
1773unsigned	char	c_cc[NCC];  /* control chars */
1774.Ed
1775.Pp
1776The special control characters are defined by the array
1777.Fa c_cc .
1778The symbolic name
1779.Dv NCC
1780is the size of the Control-character array and is also
1781defined by
1782.In termio.h .
1783The relative positions, subscript names, and typical
1784default values for each function are as follows:
1785.Bl -column "Relative Positions" "Subscript Names" "Typical Default Values"
1786.It Relative Positions Ta Subscript Names Ta Typical Default Values
1787.It 0 Ta VINTR Ta EXT
1788.It 1 Ta VQUIT Ta FS
1789.It 2 Ta VERASE Ta DEL
1790.It 3 Ta VKILL Ta NAK
1791.It 4 Ta VEOF Ta EOT
1792.It 5 Ta VEOL Ta NUL
1793.It 6 Ta VEOL2 Ta NUL
1794.It 7 Ta Reserved Ta
1795.El
1796.Pp
1797The
1798.Sy MIN
1799values is stored in the
1800.Dv VMIN
1801element of the
1802.Fa c_cc
1803array; the
1804.Sy TIME
1805value is stored in the
1806.Dv VTIME
1807element of the
1808.Fa c_cc
1809array.
1810The
1811.Dv VMIN
1812element is the same element as the
1813.Dv VEOF
1814element; the
1815.Dv VTIME
1816element is the same element as the
1817.Dv VEOL
1818element.
1819.Pp
1820The calls that use the
1821.Va termio
1822structure only affect the flags and control
1823characters that can be stored in the
1824.Vt termio
1825structure; all other flags and control characters are unaffected.
1826.Ss "Modem Lines"
1827On special files representing serial ports, modem control lines can be read.
1828Control lines (if the underlying hardware supports it) may also be changed.
1829Status lines are read-only.
1830The following modem control and status lines may be
1831supported by a device; they are defined by
1832.In sys/termios.h :
1833.Pp
1834.Bl -tag -width "TIOCM_DTR" -compact -offset 2n
1835.It Dv TIOCM_LE
1836line enable
1837.It Dv TIOCM_DTR
1838data terminal ready
1839.It Dv TIOCM_RTS
1840request to send
1841.It Dv TIOCM_ST
1842secondary transmit
1843.It Dv TIOCM_SR
1844secondary receive
1845.It Dv TIOCM_CTS
1846clear to send
1847.It Dv TIOCM_CAR
1848carrier detect
1849.It Dv TIOCM_RNG
1850ring
1851.It Dv TIOCM_DSR
1852data set ready
1853.El
1854.Pp
1855.Dv TIOCM_CD
1856is a synonym for
1857.Dv TIOCM_CAR ,
1858and
1859.Dv TIOCM_RI
1860is a synonym for
1861.Dv TIOCM_RNG .
1862Not all of these are necessarily supported by any
1863particular device; check the manual page for the device in question.
1864.Pp
1865The software carrier mode can be enabled or disabled using the
1866.Dv TIOCSSOFTCAR
1867.Fn ioctl .
1868If the software carrier flag for a line is off,
1869the line pays attention to the hardware carrier detect (DCD) signal.
1870The
1871.Sy tty
1872device associated with the line cannot be opened until
1873.Sy DCD
1874is asserted.
1875If the software carrier flag is on, the line behaves as if
1876.Sy DCD
1877is always asserted.
1878.Pp
1879The software carrier flag is usually turned on for locally connected terminals
1880or other devices, and is off for lines with modems.
1881.Pp
1882To be able to issue the
1883.Dv TIOCGSOFTCAR
1884and
1885.Dv TIOCSSOFTCAR
1886.Fn ioctl
1887calls, the
1888.Sy tty
1889line should be opened with
1890.Dv O_NDELAY
1891so that the
1892.Xr open 2
1893will not wait for the carrier.
1894.Ss "Default Values"
1895The initial
1896.Vt termios
1897values upon driver open is configurable.
1898This is accomplished by setting the "ttymodes" property in the file
1899.Pa /kernel/drv/options.conf .
1900Since this property is assigned during system
1901initialization, any change to the "ttymodes" property will not take effect
1902until the next reboot.
1903The string value assigned to this property should be in
1904the same format as the output of the
1905.Xr stty 1
1906command with the -g option.
1907.Pp
1908If this property is undefined, the following
1909.Vt termios
1910modes are in effect.
1911The initial input control value is
1912.Dv BRKINT ,
1913.Dv ICRNL ,
1914.Dv IXON ,
1915.Dv IMAXBEL .
1916The initial output control value is
1917.Dv OPOST ,
1918.Dv ONLCR ,
1919.Dv TAB3 .
1920The initial hardware control value is
1921.Dv B9600 ,
1922.Dv CS8 ,
1923.Dv CREAD .
1924The initial line-discipline control value is
1925.Dv ISIG ,
1926.Dv ICANON ,
1927.Dv IEXTEN ,
1928.Dv ECHO ,
1929.Dv ECHOK ,
1930.Dv ECHOE ,
1931.Dv ECHOKE ,
1932.Dv ECHOCTL .
1933.Sh IOCTLS
1934The
1935.Fn ioctl Ns s
1936supported by devices and
1937.Sy STREAMS
1938modules providing the
1939.Xr termios 3C
1940interface are listed below.
1941Some calls may not be supported by all devices or modules.
1942The functionality provided by these calls is also
1943available through the preferred function call interface specified on
1944.Nm termios .
1945.Bl -tag -width TIOCSSOFTCAR
1946.It Dv TCGETS
1947The argument is a pointer to a
1948.Vt termios
1949structure.
1950The current terminal parameters are fetched and stored into that structure.
1951.It Dv TCSETS
1952The argument is a pointer to a
1953.Vt termios
1954structure.
1955The current terminal parameters are set from the values stored in that structure.
1956The change is immediate.
1957.It Dv TCSETSW
1958The argument is a pointer to a
1959.Vt termios
1960structure.
1961The current terminal parameters are set from the values stored in that structure.
1962The change occurs after all characters queued for output have been transmitted.
1963This form should be used when changing parameters that affect output.
1964.It Dv TCSETSF
1965The argument is a pointer to a
1966.Vt termios
1967structure.
1968The current terminal parameters are set from the values stored in that structure.
1969The change occurs after all characters queued for output have been transmitted;
1970all characters queued for input are discarded and then the change occurs.
1971.It Dv TCGETA
1972The argument is a pointer to a
1973.Vt termio
1974structure.
1975The current terminal parameters are fetched, and those parameters that can be
1976stored in a
1977.Vt termio
1978structure are stored into that structure.
1979.It Dv TCSETA
1980The argument is a pointer to a
1981.Vt termio
1982structure.
1983Those terminal parameters that can be stored in a
1984.Vt termio
1985structure are set from the values stored in that structure.
1986The change is immediate.
1987.It Dv TCSETAW
1988The argument is a pointer to a
1989.Vt termio
1990structure.
1991Those terminal parameters that can be stored in a
1992.Vt termio
1993structure are set from
1994the values stored in that structure.
1995The change occurs after all characters queued for output have been transmitted.
1996This form should be used when changing parameters that affect output.
1997.It Dv TCSETAF
1998The argument is a pointer to a
1999.Vt termio
2000structure.
2001Those terminal parameters that can be stored in a
2002.Vt termio
2003structure are set from the values stored in that structure.
2004The change occurs after all characters queued
2005for output have been transmitted; all characters queued for input are discarded
2006and then the change occurs.
2007.It Dv TCSBRK
2008The argument is an
2009.Vt int
2010value.
2011Wait for the output to drain.
2012If the argument is
2013.Sy 0 ,
2014then send a break (zero valued bits for 0\&.25 seconds).
2015.It Dv TCXONC
2016Start/stop control.
2017The argument is an
2018.Vt int
2019value.
2020If the argument is
2021.Sy 0 ,
2022suspend output; if
2023.Sy 1 ,
2024restart suspended output; if
2025.Sy 2 ,
2026suspend input; if
2027.Sy 3 ,
2028restart suspended input.
2029.It Dv TCFLSH
2030The argument is an
2031.Vt int
2032value.
2033If the argument is
2034.Sy 0 ,
2035flush the input queue; if
2036.Sy 1 ,
2037flush the output queue; if
2038.Sy 2 ,
2039flush both the input and output queues.
2040.It Dv TIOCGPGRP
2041The argument is a pointer to a
2042.Vt pid_t .
2043Set the value of that
2044.Vt pid_t
2045to the process group
2046.Sy ID
2047of the foreground process group associated with the terminal.
2048See
2049.Xr termios 3C
2050for a description of
2051.Dv TCGETPGRP .
2052.It Dv TIOCSPGRP
2053The argument is a pointer to a
2054.Vt pid_t .
2055Associate the process group whose
2056process group
2057.Sy ID
2058is specified by the value of that
2059.Vt pid_t
2060with the terminal.
2061The new process group value must be in the range of valid process
2062group
2063.Sy ID
2064values.
2065Otherwise, the error
2066.Er EPERM
2067is returned.
2068.It Dv TIOCGSID
2069The argument is a pointer to a
2070.Vt pid_t .
2071The session ID of the terminal is fetched and stored in the
2072.Vt pid_t .
2073.It Dv TIOCGWINSZ
2074The argument is a pointer to a
2075.Vt winsize
2076structure.
2077The terminal driver's
2078notion of the terminal size is stored into that structure.
2079.It Dv TIOCSWINSZ
2080The argument is a pointer to a
2081.Vt winsize
2082structure.
2083The terminal driver's
2084notion of the terminal size is set from the values specified in that structure.
2085If the new sizes are different from the old sizes, a
2086.Dv SIGWINCH
2087signal is set to the process group of the terminal.
2088.It Dv TIOCMBIS
2089The argument is a pointer to an
2090.Vt int
2091whose value is a mask containing modem control lines to be turned on.
2092The control lines whose bits are set in
2093the argument are turned on; no other control lines are affected.
2094.It Dv TIOCMBIC
2095The argument is a pointer to an
2096.Vt int
2097whose value is a mask containing modem control lines to be turned off.
2098The control lines whose bits are set in
2099the argument are turned off; no other control lines are affected.
2100.It Dv TIOCMGET
2101The argument is a pointer to an
2102.Vt int .
2103The current state of the modem
2104status lines is fetched and stored in the
2105.Vt int
2106pointed to by the argument.
2107.It Dv TIOCMSET
2108The argument is a pointer to an
2109.Vt int
2110containing a new set of modem control lines.
2111The modem control lines are turned on or off, depending on
2112whether the bit for that mode is set or clear.
2113.It Dv TIOCSPPS
2114The argument is a pointer to an
2115.Vt int
2116that determines whether pulse-per-second event handling is to be enabled
2117(non-zero) or disabled (zero).
2118If a one-pulse-per-second reference clock is attached to the serial line's data
2119carrier detect input, the local system clock will be calibrated to it.
2120A clock with a high error, that is, a deviation of more than 25 microseconds
2121per tick, is ignored.
2122.It Dv TIOCGPPS
2123The argument is a pointer to an
2124.Vt int ,
2125in which the state of the even handling is returned.
2126The
2127.Vt int
2128is set to a non-zero value if pulse-per-second (PPS) handling has been enabled.
2129Otherwise, it is set to zero.
2130.It Dv TIOCGSOFTCAR
2131The argument is a pointer to an
2132.Vt int
2133whose value is
2134.Sy 1
2135or
2136.Sy 0 ,
2137depending on whether the software carrier detect is turned on or off.
2138.It Dv TIOCSSOFTCAR
2139The argument is a pointer to an
2140.Vt int
2141whose value is
2142.Sy 1
2143or
2144.Sy 0 .
2145The value of the integer should be
2146.Sy 0
2147to turn off software carrier, or
2148.Sy 1
2149to turn it on.
2150.It Dv TIOCGPPSEV
2151The argument is a pointer to a
2152.Vt "struct ppsclockev" .
2153This structure contains the following members:
2154.Bd -literal -offset 2n
2155struct timeval tv;
2156uint32_t serial;
2157.Ed
2158.Pp
2159.Fa tv
2160is the system clock timestamp when the event (pulse on the
2161.Sy DCD
2162pin) occurred.
2163.Fa serial
2164is the ordinal of the event, which each consecutive event
2165being assigned the next ordinal.
2166The first event registered gets a
2167.Fa serial
2168value of
2169.Sy 1 .
2170The
2171.Dv TIOCGPPSEV
2172returns the last event registered; multiple calls will persistently return the
2173same event until a new one is registered.
2174In addition to time stamping and saving the event, if it is of
2175one-second period and of consistently high accuracy, the local system clock
2176will automatically calibrate to it.
2177.El
2178.Sh FILES
2179Files in or under
2180.Pa /dev
2181.Sh SEE ALSO
2182.Xr stty 1 ,
2183.Xr fork 2 ,
2184.Xr getpgid 2 ,
2185.Xr getsid 2 ,
2186.Xr ioctl 2 ,
2187.Xr setsid 2 ,
2188.Xr sigaction 2 ,
2189.Xr signal 3C ,
2190.Xr tcsetpgrp 3C ,
2191.Xr termios 3C ,
2192.Xr signal.h 3HEAD ,
2193.Xr streamio 4I
2194