|
|
1.1 root 1: .\" Copyright (c) 1983 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)tty.4 6.7 (Berkeley) 5/19/86
6: .\"
7: .TH TTY 4 "May 19, 1986"
8: .UC 4
9: .SH NAME
10: tty \- general terminal interface
11: .SH SYNOPSIS
12: .B #include <sgtty.h>
13: .SH DESCRIPTION
14: This section describes
15: both a particular special file
16: .B /dev/tty
17: and the terminal drivers used for conversational computing.
18: .LP
19: .B Line disciplines.
20: .PP
21: The system provides different
22: .I "line disciplines"
23: for controlling communications lines.
24: In this version of the system there are two disciplines available for use
25: with terminals:
26: .IP "old" 8
27: The old (Version 7) terminal driver. This is sometimes used when using the
28: standard shell
29: .IR sh (1).
30: .IP "new"
31: The standard Berkeley terminal driver, with features for job control;
32: this must be used when using
33: .IR csh (1).
34: .LP
35: Line discipline switching is accomplished with the TIOCSETD
36: .IR ioctl :
37: .IP
38: .B "int ldisc = LDISC;"
39: .br
40: .B "ioctl(f, TIOCSETD, &ldisc);"
41: .LP
42: where LDISC is OTTYDISC for the standard tty driver
43: and NTTYDISC for the ``new'' driver.
44: The standard (currently old) tty driver is discipline 0 by convention.
45: Other disciplines may exist for special purposes, such as use of communications
46: lines for network connections.
47: The current line discipline can be obtained with the TIOCGETD
48: .IR ioctl .
49: Pending input is discarded when the line discipline is changed.
50: .PP
51: All of the low-speed asynchronous
52: communications ports can use any
53: of the available line disciplines, no matter what
54: hardware is involved.
55: The remainder of this section discusses the
56: \*(lqold\*(rq and \*(lqnew\*(rq disciplines.
57: .LP
58: .B "The control terminal."
59: .LP
60: When a terminal file is opened, it causes the process to wait until a
61: connection is established. In practice, user programs seldom open
62: these files; they are opened by
63: .IR getty (8)
64: or
65: .IR rlogind (8C)
66: and become a user's standard input and output file.
67: .PP
68: If a process which has no control terminal opens a terminal file, then
69: that terminal file becomes the control terminal for that process.
70: The control terminal is thereafter inherited by a child process during a
71: .IR fork (2),
72: even if the control terminal is closed.
73: .LP
74: The file
75: .B /dev/tty
76: is, in each process, a synonym for a
77: .I "control terminal"
78: associated with that process. It is useful for programs that wish to
79: be sure of writing messages on the terminal
80: no matter how output has been redirected.
81: It can also be used for programs that demand a file name
82: for output, when typed output is desired
83: and it is tiresome to find out which terminal
84: is currently in use.
85: .LP
86: A process can remove the association it has with its controlling
87: terminal by opening the file
88: .B /dev/tty
89: and issuing an
90: .IP
91: .B "ioctl(f, TIOCNOTTY, 0);"
92: .LP
93: This is often desirable in server processes.
94: .LP
95: .B "Process groups."
96: .LP
97: Command processors such as
98: .IR csh (1)
99: can arbitrate the terminal between different
100: .I jobs
101: by placing related jobs in a single process group and associating this
102: process group with the terminal. A terminal's associated process group
103: may be set using the TIOCSPGRP
104: .IR ioctl (2):
105: .IP
106: .B "ioctl(fildes, TIOCSPGRP, &pgrp);"
107: .LP
108: or examined using TIOCGPGRP, which returns the current
109: process group in
110: .IR pgrp .
111: The new terminal driver aids in this arbitration by restricting access
112: to the terminal by processes which are not in the current process group;
113: see
114: .B "Job access control"
115: below.
116: .LP
117: .B "Modes."
118: .PP
119: The terminal drivers have three major modes, characterized by the
120: amount of processing on the input and output characters:
121: .IP cooked 10
122: The normal mode. In this mode lines of input are collected and input editing
123: is done. The edited line is made available when it is completed by
124: a newline,
125: or when the \fIt_brkc\fP character (normally undefined)
126: or \fIt_eofc\fP character (normally an EOT, control-D, hereafter ^D)
127: is entered.
128: A carriage return is usually made synonymous with newline in this mode,
129: and replaced with a newline whenever it is typed.
130: All driver functions
131: (input editing, interrupt generation,
132: output processing such as delay generation and tab expansion, etc.)
133: are available in this mode.
134: .IP CBREAK 10
135: This mode eliminates the character, word, and line editing input facilities,
136: making the input character available to the user program as it is typed.
137: Flow control, literal-next and interrupt processing are still done in this mode.
138: Output processing is done.
139: .IP RAW 10
140: This mode eliminates all input processing and makes all input characters
141: available as they are typed; no output processing is done either.
142: .PP
143: The style of input processing can also be very different when
144: the terminal is put in non-blocking I/O mode; see
145: the FNDELAY flag described in
146: .IR fcntl (2).
147: In this case a
148: .IR read (2)
149: from the control terminal will never block, but rather
150: return an error indication (EWOULDBLOCK) if there is no
151: input available.
152: .PP
153: A process may also request that a SIGIO signal be sent it whenever input
154: is present and also whenever output queues fall below the low-water mark.
155: To enable this mode the FASYNC flag should be set using
156: .IR fcntl (2).
157: .LP
158: .B "Input editing."
159: .LP
160: A UNIX terminal ordinarily operates in full-duplex mode.
161: Characters may be typed at any time,
162: even while output is occurring, and are only lost when the
163: system's character input buffers become completely
164: choked, which is rare,
165: or when the user has accumulated the maximum allowed number of
166: input characters that have not yet been read by some program.
167: Currently this limit is 256 characters.
168: In RAW mode, the terminal driver
169: throws away all input and output without notice when the limit is reached.
170: In CBREAK or cooked mode it refuses to accept any further input and,
171: if in the new line discipline, rings the terminal bell.
172: .PP
173: Input characters are normally accepted in either even or odd parity
174: with the parity bit being stripped off before the character is given to
175: the program. By clearing either the EVEN or ODD bit in the flags word
176: it is possible to have input characters with that parity discarded (see the
177: \fBSummary\fR below.)
178: .PP
179: In all of the line disciplines, it is possible to simulate terminal
180: input using the TIOCSTI
181: .IR ioctl ,
182: which takes, as its third argument,
183: the address of a character. The system pretends that this character
184: was typed on the argument terminal, which must be the control terminal except
185: for the super-user (this call is not in standard version 7 UNIX).
186: .PP
187: Input characters are normally echoed by putting them in an output queue
188: as they arrive. This may be disabled by clearing the ECHO bit in the
189: flags word using the
190: .IR stty (3C)
191: call or the TIOCSETN or TIOCSETP
192: .IR ioctl s
193: (see the \fBSummary\fR below).
194: .PP
195: In cooked mode, terminal input is processed in units of lines.
196: A program attempting
197: to read will normally be suspended until an entire line has been
198: received
199: (but see the description of SIGTTIN in \fBJob access control\fR
200: and of FIONREAD in
201: \fBSummary\fR, both below.)
202: No matter how many characters are requested
203: in the read call, at most one line will be returned.
204: It is not, however, necessary to read a whole line at
205: once; any number of characters may be
206: requested in a read, even one, without losing information.
207: .PP
208: During input, line editing is normally done, with the erase character
209: .I sg_erase
210: (by default, DELETE)
211: logically erasing the last character typed and the
212: .I sg_kill
213: character (default, ^U: control-U)
214: logically erasing the entire current input line.
215: These characters
216: never erase beyond the beginning of the current input line or an eof.
217: These characters may be entered literally by
218: preceding them with `\e\|'; the `\e\|' will normally be erased when the
219: character is typed.
220: .PP
221: The drivers normally treat either a carriage return or a newline character
222: as terminating an input line, replacing the return with a newline and echoing
223: a return and a line feed.
224: If the CRMOD bit is cleared in the local mode word then the processing
225: for carriage return is disabled, and it is simply echoed as a return,
226: and does not terminate cooked mode input.
227: .PP
228: In the new driver there is a literal-next character (normally ^V)
229: which can be typed
230: in both cooked and CBREAK mode preceding
231: .I any
232: character to prevent its special meaning to the terminal handler.
233: This is to be preferred to the
234: use of `\e\|' escaping erase and kill characters, but `\e\|' is
235: retained with its old function in the new line discipline.
236: .PP
237: The new terminal driver also provides two other editing characters in
238: normal mode. The word-erase character, normally ^W, erases the preceding
239: word, but not any spaces before it. For the purposes of ^W, a word
240: is defined as a sequence of non-blank characters, with tabs counted as
241: blanks.
242: Finally, the reprint character, normally ^R, retypes the pending input beginning
243: on a new line. Retyping occurs automatically in cooked mode if characters
244: which would normally be erased from the screen are fouled by program output.
245: .LP
246: .B "Input echoing and redisplay"
247: .LP
248: The terminal driver has several modes (not present in standard UNIX
249: Version 7 systems) for handling the echoing of
250: terminal input, controlled by bits in a local mode word.
251: .LP
252: .I "Hardcopy terminals."
253: When a hardcopy terminal is in use, the LPRTERA bit is normally set in
254: the local mode word. Characters which are logically erased are
255: then printed out backwards preceded by `\e\|' and followed by `/' in this mode.
256: .LP
257: .I "CRT terminals."
258: When a CRT terminal is in use, the LCRTBS bit is normally set in the local
259: mode word. The terminal driver then echoes the proper number of erase
260: characters when input is erased; in the normal case where the erase
261: character is a ^H this causes the cursor of the terminal to back up
262: to where it was before the logically erased character was typed.
263: If the input has become fouled due to interspersed asynchronous output,
264: the input is automatically retyped.
265: .LP
266: .I "Erasing characters from a CRT."
267: When a CRT terminal is in use, the LCRTERA bit may be set to cause
268: input to be erased from the screen with a \*(lqbackspace-space-backspace\*(rq
269: sequence when character or word deleting sequences are used.
270: A LCRTKIL bit may be set as well, causing the input to
271: be erased in this manner on line kill sequences as well.
272: .LP
273: .I "Echoing of control characters."
274: If the LCTLECH bit is set in the local state word, then non-printing (control)
275: characters are normally echoed as ^X (for some X)
276: rather than being echoed unmodified; delete is echoed as ^?.
277: .LP
278: The normal modes for use on CRT terminals are speed dependent.
279: At speeds less than 1200 baud, the LCRTERA and LCRTKILL processing
280: is painfully slow, and
281: .IR stty (1)
282: normally just sets LCRTBS and LCTLECH; at
283: speeds of 1200 baud or greater all of these bits are normally set.
284: .IR Stty (1)
285: summarizes these option settings and the use of the new terminal
286: driver as
287: \*(lqnewcrt.\*(rq
288: .LP
289: .B "Output processing."
290: .PP
291: When one or more
292: characters are written, they are actually transmitted
293: to the terminal as soon as previously-written characters
294: have finished typing.
295: (As noted above, input characters are normally
296: echoed by putting them in the output queue
297: as they arrive.)
298: When a process produces characters more rapidly than they can be typed,
299: it will be suspended when its output queue exceeds some limit.
300: When the queue has drained down to some threshold
301: the program is resumed.
302: Even parity is normally generated on output.
303: The EOT character is not transmitted in cooked mode to prevent terminals
304: that respond to it from hanging up; programs using RAW or CBREAK mode
305: should be careful.
306: .PP
307: The terminal drivers provide necessary processing for cooked and CBREAK mode
308: output including delay generation for certain special characters and parity
309: generation. Delays are available after backspaces ^H, form feeds ^L,
310: carriage returns ^M, tabs ^I and newlines ^J. The driver will also optionally
311: expand tabs into spaces, where the tab stops are assumed to be set every
312: eight columns, and optionally convert newlines to carriage returns
313: followed by newline. These functions are controlled by bits in the tty
314: flags word; see \fBSummary\fR below.
315: .PP
316: The terminal drivers provide for mapping between upper and lower case
317: on terminals lacking lower case, and for other special processing on
318: deficient terminals.
319: .PP
320: Finally, in the new terminal driver, there is a output flush character,
321: normally ^O, which sets the LFLUSHO bit in the local mode word, causing
322: subsequent output to be flushed until it is cleared by a program or more
323: input is typed. This character has effect in both cooked and CBREAK modes
324: and causes pending input to be retyped if there is any pending input.
325: An
326: .I ioctl
327: to flush the characters in the input or output queues, TIOCFLUSH,
328: is also available.
329: .LP
330: .B "Upper case terminals and Hazeltines"
331: .PP
332: If the LCASE bit is set in the tty flags, then
333: all upper-case letters are mapped into
334: the corresponding lower-case letter.
335: The upper-case letter may be generated by preceding
336: it by `\\'.
337: Upper case letters are preceded by a `\e\|' when output.
338: In addition, the following escape sequences can be generated
339: on output and accepted on input:
340: .PP
341: .nf
342: for \` | ~ { }
343: use \e\|\' \e\|! \e\|^ \e\|( \e\|)
344: .fi
345: .PP
346: To deal with Hazeltine terminals, which do not understand that ~ has
347: been made into an ASCII character, the LTILDE bit may be set in the local
348: mode word; in this case the character
349: ~ will be replaced with the character \` on output.
350: .LP
351: .B "Flow control."
352: .PP
353: There are two characters (the stop character, normally ^S, and the
354: start character, normally ^Q) which cause output to be suspended and
355: resumed respectively. Extra stop characters typed when output
356: is already stopped have no effect, unless the start and stop characters
357: are made the same, in which case output resumes.
358: .PP
359: A bit in the flags word may be set to put the terminal into TANDEM mode.
360: In this mode the system produces a stop character (default ^S) when
361: the input queue is in danger of overflowing, and a start character (default
362: ^Q) when the input has drained sufficiently. This mode is useful
363: when the terminal is actually another machine that obeys those
364: conventions.
365: .LP
366: .B "Line control and breaks."
367: .LP
368: There are several
369: .I ioctl
370: calls available to control the state of the terminal line.
371: The TIOCSBRK
372: .I ioctl
373: will set the break bit in the hardware interface
374: causing a break condition to exist; this can be cleared (usually after a delay
375: with
376: .IR sleep (3))
377: by TIOCCBRK.
378: Break conditions in the input are reflected as a null character in RAW mode
379: or as the interrupt character in cooked or CBREAK mode.
380: The TIOCCDTR
381: .I ioctl
382: will clear the data terminal ready condition; it can
383: be set again by TIOCSDTR.
384: .PP
385: When the carrier signal from the dataset drops (usually
386: because the user has hung up his terminal) a
387: SIGHUP hangup signal is sent to the processes in the distinguished
388: process group of the terminal; this usually causes them to terminate.
389: The SIGHUP can be suppressed by setting the LNOHANG bit in the local
390: state word of the driver.
391: Access to the terminal by other processes is then normally revoked,
392: so any further reads will fail, and programs that read a terminal and test for
393: end-of-file on their input will terminate appropriately.
394: .PP
395: It is possible to ask that the phone line be hung up on the last close
396: with the TIOCHPCL
397: .IR ioctl ;
398: this is normally done on the outgoing lines and dialups.
399: .LP
400: .B "Interrupt characters."
401: .PP
402: There are several characters that generate interrupts in cooked and CBREAK
403: mode; all are sent to the processes in the control group of the terminal,
404: as if a TIOCGPGRP
405: .I ioctl
406: were done to get the process group and then a
407: .IR killpg (2)
408: system call were done,
409: except that these characters also flush pending input and output when
410: typed at a terminal
411: (\fI\z'a\`'la\fR TIOCFLUSH).
412: The characters shown here are the defaults; the field names in the structures
413: (given below)
414: are also shown.
415: The characters may be changed.
416: .IP ^C
417: \fBt_intrc\fR (ETX) generates a SIGINT signal.
418: This is the normal way to stop a process which is no longer interesting,
419: or to regain control in an interactive program.
420: .IP ^\e
421: \fBt_quitc\fR (FS) generates a SIGQUIT signal.
422: This is used to cause a program to terminate and produce a core image,
423: if possible,
424: in the file
425: .B core
426: in the current directory.
427: .IP ^Z
428: \fBt_suspc\fR (EM) generates a SIGTSTP signal, which is used to suspend
429: the current process group.
430: .IP ^Y
431: \fBt_dsuspc\fR (SUB) generates a SIGTSTP signal as ^Z does, but the
432: signal is sent when a program attempts to read the ^Y, rather than when
433: it is typed.
434: .LP
435: .B "Job access control."
436: .PP
437: When using the new terminal driver,
438: if a process which is not in the distinguished process group of its
439: control terminal attempts to read from that terminal its process group is
440: sent a SIGTTIN signal. This signal normally causes the members of
441: that process group to stop.
442: If, however, the process is ignoring SIGTTIN, has SIGTTIN blocked,
443: or is in the middle of process creation using
444: .IR vfork (2)),
445: the read will return \-1 and set
446: .I errno
447: to EIO.
448: .PP
449: When using the new terminal driver with the LTOSTOP bit set in the local
450: modes, a process is prohibited from writing on its control terminal if it is
451: not in the distinguished process group for that terminal.
452: Processes which are holding or ignoring SIGTTOU signals
453: or which are in the middle of a
454: .IR vfork (2)
455: are excepted and allowed to produce output.
456: .B "Terminal/window sizes."
457: In order to accommodate terminals and workstations with variable-sized
458: windows, the terminal driver provides a mechanism for obtaining and setting
459: the current terminal size.
460: The driver does not use this information internally, but only stores it
461: and provides a uniform access mechanism.
462: When the size is changed, a SIGWINCH signal is sent to the terminal's process
463: group so that knowledgeable programs may detect size changes.
464: This facility was added in 4.3BSD and is not available in earlier
465: versions of the system.
466: .LP
467: .B "Summary of modes."
468: .LP
469: Unfortunately, due to the evolution of the terminal driver,
470: there are 4 different structures which contain various portions of the
471: driver data. The first of these (\fBsgttyb\fR)
472: contains that part of the information
473: largely common between version 6 and version 7 UNIX systems.
474: The second contains additional control characters added in version 7.
475: The third is a word of local state added in 4BSD,
476: and the fourth is another structure of special characters added for the
477: new driver. In the future a single structure may be made available
478: to programs which need to access all this information; most programs
479: need not concern themselves with all this state.
480: .de Ul
481: .ie t \\$1\l'|0\(ul'
482: .el \fI\\$1\fP
483: ..
484: .LP
485: .Ul "Basic modes: sgtty."
486: .PP
487: The basic
488: .IR ioctl s
489: use the structure
490: defined in
491: .IR <sgtty.h> :
492: .PP
493: .ta .5i 1i
494: .nf
495: .ft 3
496: struct sgttyb {
497: char sg_ispeed;
498: char sg_ospeed;
499: char sg_erase;
500: char sg_kill;
501: short sg_flags;
502: };
503: .ft R
504: .fi
505: .PP
506: The
507: .I sg_ispeed
508: and
509: .I sg_ospeed
510: fields describe the input and output speeds of the
511: device according to the following table,
512: which corresponds to the DEC DH-11 interface.
513: If other hardware is used,
514: impossible speed changes are ignored.
515: Symbolic values in the table are as defined in
516: .IR <sgtty.h> .
517: .PP
518: .nf
519: .ta \w'B9600 'u +5n
520: B0 0 (hang up dataphone)
521: B50 1 50 baud
522: B75 2 75 baud
523: B110 3 110 baud
524: B134 4 134.5 baud
525: B150 5 150 baud
526: B200 6 200 baud
527: B300 7 300 baud
528: B600 8 600 baud
529: B1200 9 1200 baud
530: B1800 10 1800 baud
531: B2400 11 2400 baud
532: B4800 12 4800 baud
533: B9600 13 9600 baud
534: EXTA 14 External A
535: EXTB 15 External B
536: .fi
537: .DT
538: .PP
539: Code conversion and line control required for
540: IBM 2741's (134.5 baud)
541: must be implemented by the user's
542: program.
543: The half-duplex line discipline
544: required for the 202 dataset (1200 baud)
545: is not supplied; full-duplex 212 datasets work fine.
546: .PP
547: The
548: .I sg_erase
549: and
550: .I sg_kill
551: fields of the argument structure
552: specify the erase and kill characters respectively.
553: (Defaults are DELETE and ^U.)
554: .PP
555: The
556: .I sg_flags
557: field of the argument structure
558: contains several bits that determine the
559: system's treatment of the terminal:
560: .PP
561: .ta \w'ALLDELAY 'u +\w'0100000 'u
562: .nf
563: ALLDELAY 0177400 Delay algorithm selection
564: BSDELAY 0100000 Select backspace delays (not implemented):
565: BS0 0
566: BS1 0100000
567: VTDELAY 0040000 Select form-feed and vertical-tab delays:
568: FF0 0
569: FF1 0040000
570: CRDELAY 0030000 Select carriage-return delays:
571: CR0 0
572: CR1 0010000
573: CR2 0020000
574: CR3 0030000
575: TBDELAY 0006000 Select tab delays:
576: TAB0 0
577: TAB1 0002000
578: TAB2 0004000
579: XTABS 0006000
580: NLDELAY 0001400 Select new-line delays:
581: NL0 0
582: NL1 0000400
583: NL2 0001000
584: NL3 0001400
585: EVENP 0000200 Even parity allowed on input
586: ODDP 0000100 Odd parity allowed on input
587: RAW 0000040 Raw mode: wake up on all characters, 8-bit interface
588: CRMOD 0000020 Map CR into LF; output LF as CR-LF
589: ECHO 0000010 Echo (full duplex)
590: LCASE 0000004 Map upper case to lower on input and lower to upper on output
591: CBREAK 0000002 Return each character as soon as typed
592: TANDEM 0000001 Automatic flow control
593: .DT
594: .fi
595: .PP
596: The delay bits specify how long
597: transmission stops to allow for mechanical or other movement
598: when certain characters are sent to the terminal.
599: In all cases a value of 0 indicates no delay.
600: .PP
601: Backspace delays are currently ignored but might
602: be used for Terminet 300's.
603: .PP
604: If a form-feed/vertical tab delay is specified,
605: it lasts for about 2 seconds.
606: .PP
607: Carriage-return delay type 1 lasts about .08 seconds
608: and is suitable for the Terminet 300.
609: Delay type 2 lasts about .16 seconds and is suitable
610: for the VT05 and the TI 700.
611: Delay type 3 is suitable for the concept-100 and pads lines
612: to be at least 9 characters at 9600 baud.
613: .PP
614: New-line delay type 1 is dependent on the current column
615: and is tuned for Teletype model 37's.
616: Type 2 is useful for the VT05 and is about .10 seconds.
617: Type 3 is unimplemented and is 0.
618: .PP
619: Tab delay type 1 is dependent on the amount of movement
620: and is tuned to the Teletype model
621: 37.
622: Type 3, called XTABS,
623: is not a delay at all but causes tabs to be replaced
624: by the appropriate number of spaces on output.
625: .PP
626: The flags for even and odd parity control parity checking on input
627: and generation on output in cooked and CBREAK mode
628: (unless LPASS8 is enabled, see below).
629: Even parity is generated on output unless ODDP is set and EVENP
630: is clear, in which case odd parity is generated.
631: Input characters with the wrong parity, as determined by EVENP and
632: ODDP, are ignored in cooked and CBREAK mode.
633: .PP
634: RAW
635: disables all processing save output flushing with LFLUSHO;
636: full 8 bits of input are given as soon as
637: it is available; all 8 bits are passed on output.
638: A break condition in the input is reported as a null character.
639: If the input queue overflows in raw mode all data in the input and output
640: queues are discarded; this applies to both new and old drivers.
641: .PP
642: CRMOD causes input carriage returns to be turned into
643: new-lines, and output and echoed new-lines to be output as a carriage return
644: followed by a line feed.
645: .PP
646: CBREAK is a sort of half-cooked (rare?) mode.
647: Programs can read each character as soon as typed, instead
648: of waiting for a full line;
649: all processing is done except the input editing:
650: character and word erase and line kill, input reprint,
651: and the special treatment of \e and EOT are disabled.
652: .PP
653: TANDEM mode causes the system to produce
654: a stop character (default ^S) whenever the input
655: queue is in danger of overflowing, and a start character
656: (default ^Q)
657: when the input queue has drained sufficiently.
658: It is useful for flow control when the `terminal'
659: is really another computer which understands the conventions.
660: .LP
661: .B Note:
662: The same ``stop'' and ``start'' characters are used for both directions
663: of flow control; the
664: .I t_stopc
665: character is accepted on input as the character that stops output and is
666: produced on output as the character to stop input, and the
667: .I t_startc
668: character is accepted on input as the character that restarts output and is
669: produced on output as the character to restart input.
670: .LP
671: .Ul "Basic ioctls"
672: .PP
673: A large number of
674: .IR ioctl (2)
675: calls apply to terminals. Some have the general form:
676: .PP
677: .B #include <sgtty.h>
678: .PP
679: .B ioctl(fildes, code, arg)
680: .br
681: .B struct sgttyb *arg;
682: .PP
683: The applicable codes are:
684: .IP TIOCGETP 15
685: Fetch the basic parameters associated with the terminal, and store
686: in the pointed-to \fIsgttyb\fR structure.
687: .IP TIOCSETP
688: Set the parameters according to the pointed-to \fIsgttyb\fR structure.
689: The interface delays until output is quiescent,
690: then throws away any unread characters,
691: before changing the modes.
692: .IP TIOCSETN
693: Set the parameters like TIOCSETP but do not delay or flush input.
694: Input is not preserved, however, when changing to or from RAW.
695: .PP
696: With the following codes
697: .I arg
698: is ignored.
699: .IP TIOCEXCL 15
700: Set \*(lqexclusive-use\*(rq mode:
701: no further opens are permitted until the file has been closed.
702: .IP TIOCNXCL
703: Turn off \*(lqexclusive-use\*(rq mode.
704: .IP TIOCHPCL
705: When the file is closed for the last time,
706: hang up the terminal.
707: This is useful when the line is associated
708: with an ACU used to place outgoing calls.
709: .PP
710: With the following codes
711: .I arg
712: is a pointer to an
713: .BR int .
714: .IP TIOCGETD 15
715: .I arg
716: is a pointer to an
717: .B int
718: into which is placed the current line discipline number.
719: .IP TIOCSETD
720: .I arg
721: is a pointer to an
722: .B int
723: whose value becomes the current line discipline number.
724: .IP TIOCFLUSH
725: If the
726: .B int
727: pointed to by
728: .I arg
729: has a zero value, all characters waiting in input or output queues are flushed.
730: Otherwise, the value of the
731: .B int
732: is for the FREAD and FWRITE bits defined in
733: .BR <sys/file.h> ;
734: if the FREAD bit is set, all characters waiting in input queues are flushed,
735: and if the FWRITE bit is set, all characters waiting in output queues are
736: flushed.
737: .LP
738: The remaining calls are not available in vanilla version 7 UNIX.
739: In cases where arguments are required, they are described; \fIarg\fR
740: should otherwise be given as 0.
741: .IP TIOCSTI 15
742: the argument points to a character which the system
743: pretends had been typed on the terminal.
744: .IP TIOCSBRK 15
745: the break bit is set in the terminal.
746: .IP TIOCCBRK
747: the break bit is cleared.
748: .IP TIOCSDTR
749: data terminal ready is set.
750: .IP TIOCCDTR
751: data terminal ready is cleared.
752: .IP TIOCSTOP 15
753: output is stopped as if the ``stop'' character had been typed.
754: .IP TIOCSTART
755: output is restarted as if the ``start'' character had been typed.
756: .IP TIOCGPGRP
757: .I arg
758: is a pointer to an
759: .B int
760: into which is placed the process group ID of the process group
761: for which this terminal is the control terminal.
762: .IP TIOCSPGRP
763: .I arg
764: is a pointer to an
765: .B int
766: which is the value to which the process group ID
767: for this terminal will be set.
768: .IP TIOCOUTQ
769: returns in the
770: .B int
771: pointed to by
772: .I arg
773: the number of characters queued for output to the terminal.
774: .IP FIONREAD
775: returns in the
776: .B int
777: pointed to by
778: .I arg
779: the number of characters immediately readable from the argument descriptor.
780: This works for files, pipes, and terminals.
781: .PP
782: .Ul Tchars
783: .PP
784: The second structure associated with each terminal specifies
785: characters that are special in both the old and new terminal interfaces:
786: The following structure is defined in
787: .IR <sys/ioctl.h> ,
788: which is automatically included in
789: .IR <sgtty.h> :
790: .PP
791: .nf
792: .ft 3
793: .ta .5i 1i 2i
794: struct tchars {
795: char t_intrc; /* interrupt */
796: char t_quitc; /* quit */
797: char t_startc; /* start output */
798: char t_stopc; /* stop output */
799: char t_eofc; /* end-of-file */
800: char t_brkc; /* input delimiter (like nl) */
801: };
802: .DT
803: .fi
804: .ft R
805: .PP
806: The default values for these characters are
807: ^C, ^\e\|, ^Q, ^S, ^D, and \-1.
808: A character value of \-1
809: eliminates the effect of that character.
810: The
811: .I t_brkc
812: character, by default \-1,
813: acts like a new-line in that it terminates a `line,'
814: is echoed, and is passed to the program.
815: The `stop' and `start' characters may be the same,
816: to produce a toggle effect.
817: It is probably counterproductive to make
818: other special characters (including erase and kill)
819: identical.
820: The applicable
821: .I ioctl
822: calls are:
823: .IP TIOCGETC 12
824: Get the special characters and put them in the specified structure.
825: .IP TIOCSETC 12
826: Set the special characters to those given in the structure.
827: .LP
828: .Ul "Local mode"
829: .PP
830: The third structure associated with each terminal is a local mode word.
831: The bits of the local mode word are:
832: .sp
833: .nf
834: LCRTBS 000001 Backspace on erase rather than echoing erase
835: LPRTERA 000002 Printing terminal erase mode
836: LCRTERA 000004 Erase character echoes as backspace-space-backspace
837: LTILDE 000010 Convert ~ to \` on output (for Hazeltine terminals)
838: LMDMBUF 000020 Stop/start output when carrier drops
839: LLITOUT 000040 Suppress output translations
840: LTOSTOP 000100 Send SIGTTOU for background output
841: LFLUSHO 000200 Output is being flushed
842: LNOHANG 000400 Don't send hangup when carrier drops
843: LETXACK 001000 Diablo style buffer hacking (unimplemented)
844: LCRTKIL 002000 BS-space-BS erase entire line on line kill
845: LPASS8 004000 Pass all 8 bits through on input, in any mode
846: LCTLECH 010000 Echo input control chars as ^X, delete as ^?
847: LPENDIN 020000 Retype pending input at next read or input character
848: LDECCTQ 040000 Only ^Q restarts output after ^S, like DEC systems
849: LNOFLSH 100000 Inhibit flushing of pending I/O when an interrupt character is typed.
850: .fi
851: .sp
852: The applicable
853: .I ioctl
854: functions are:
855: .IP TIOCLBIS 15
856: .I arg
857: is a pointer to an
858: .B int
859: whose value is a mask containing the bits to be set in the local mode word.
860: .IP TIOCLBIC
861: .I arg
862: is a pointer to an
863: .B int
864: whose value is a mask containing the bits to be cleared in the local mode word.
865: .IP TIOCLSET
866: .I arg
867: is a pointer to an
868: .B int
869: whose value is stored in the local mode word.
870: .IP TIOCLGET
871: .I arg
872: is a pointer to an
873: .B int
874: into which the current local mode word is placed.
875: .LP
876: .Ul "Local special chars"
877: .PP
878: The
879: final control structure associated with each terminal is the
880: .I ltchars
881: structure which defines control characters
882: for the new terminal driver.
883: Its structure is:
884: .nf
885: .sp
886: .ta .5i 1i 2i
887: .ft B
888: struct ltchars {
889: char t_suspc; /* stop process signal */
890: char t_dsuspc; /* delayed stop process signal */
891: char t_rprntc; /* reprint line */
892: char t_flushc; /* flush output (toggles) */
893: char t_werasc; /* word erase */
894: char t_lnextc; /* literal next character */
895: };
896: .ft R
897: .fi
898: .sp
899: The default values for these characters are ^Z, ^Y, ^R, ^O, ^W, and ^V.
900: A value of \-1 disables the character.
901: .PP
902: The applicable \fIioctl\fR functions are:
903: .IP TIOCSLTC 12
904: .I arg
905: is a pointer to an
906: .I ltchars
907: structure which defines the new local special characters.
908: .IP TIOCGLTC 12
909: .I arg
910: is a pointer to an
911: .I ltchars
912: structure into which is placed the current set of local special characters.
913: .LP
914: .Ul "Window/terminal sizes"
915: .PP
916: Each terminal has provision for storage of the current terminal or window
917: size in a
918: .I winsize
919: structure, with format:
920: .nf
921: .sp
922: .ft B
923: .ta .5i +\w'unsigned short\ \ \ \ 'u +\w'ws_ypixel;\ \ \ \ \ 'u
924: struct winsize {
925: unsigned short ws_row; /* rows, in characters */
926: unsigned short ws_col; /* columns, in characters */
927: unsigned short ws_xpixel; /* horizontal size, pixels */
928: unsigned short ws_ypixel; /* vertical size, pixels */
929: };
930: .ft R
931: .fi
932: .LP
933: A value of 0 in any field is interpreted as ``undefined;''
934: the entire structure is zeroed on final close.
935: .PP
936: The applicable \fIioctl\fP functions are:
937: .IP TIOCGWINSZ
938: .I arg
939: is a pointer to a
940: .B "struct winsize"
941: into which will be placed the current terminal or window size information.
942: .IP TIOCSWINSZ
943: .I arg
944: is a pointer to a
945: .B "struct winsize"
946: which will be used to set the current terminal or window size information.
947: If the new information is different than the old information,
948: a SIGWINCH signal will be sent to the terminal's process group.
949: .SH FILES
950: /dev/tty
951: .br
952: /dev/tty*
953: .br
954: /dev/console
955: .SH SEE ALSO
956: csh(1),
957: stty(1),
958: tset(1),
959: ioctl(2),
960: sigvec(2),
961: stty(3C),
962: getty(8)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.