]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man4/tty_ioctl.4
tty_ioctl.4: Document TIOCMIWAIT and TIOCGICOUNT
[thirdparty/man-pages.git] / man4 / tty_ioctl.4
CommitLineData
fea681da
MK
1.\" Copyright 2002 Walter Harms <walter.harms@informatik.uni-oldenburg.de>
2.\" and Andries Brouwer <aeb@cwi.nl>.
2297bf0e 3.\"
38f20bb9 4.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
b18188c5 5.\" Distributed under GPL
38f20bb9 6.\" %%%LICENSE_END
fea681da 7.\"
c323f3a1 8.TH TTY_IOCTL 4 2013-11-12 "Linux" "Linux Programmer's Manual"
fea681da 9.SH NAME
e4638098 10tty_ioctl \- ioctls for terminals and serial lines
fea681da 11.SH SYNOPSIS
0daa9e92 12.B "#include <termios.h>"
fea681da 13.sp
c13182ef 14.BI "int ioctl(int " fd ", int " cmd ", ...);"
fea681da
MK
15.SH DESCRIPTION
16The
0b80cf56 17.BR ioctl (2)
fea681da 18call for terminals and serial ports accepts many possible command arguments.
c6fa0841
MK
19Most require a third argument, of varying type, here called
20.I argp
21or
22.IR arg .
fea681da
MK
23.LP
24Use of
25.I ioctl
d603cc27 26makes for nonportable programs.
c13182ef 27Use the POSIX interface described in
fea681da
MK
28.BR termios (3)
29whenever possible.
73d8cece 30.SS Get and set terminal attributes
fea681da
MK
31.TP
32.BI "TCGETS struct termios *" argp
33Equivalent to
34.IR "tcgetattr(fd, argp)" .
35.br
36Get the current serial port settings.
37.TP
38.BI "TCSETS const struct termios *" argp
39Equivalent to
40.IR "tcsetattr(fd, TCSANOW, argp)" .
41.br
42Set the current serial port settings.
43.TP
44.BI "TCSETSW const struct termios *" argp
45Equivalent to
46.IR "tcsetattr(fd, TCSADRAIN, argp)" .
47.br
48Allow the output buffer to drain, and
49set the current serial port settings.
50.TP
51.BI "TCSETSF const struct termios *" argp
52Equivalent to
53.IR "tcsetattr(fd, TCSAFLUSH, argp)" .
54.br
55Allow the output buffer to drain, discard pending input, and
56set the current serial port settings.
57.LP
097585ed
MK
58The following four ioctls are just like
59.BR TCGETS ,
60.BR TCSETS ,
61.BR TCSETSW ,
62.BR TCSETSF ,
fea681da 63except that they take a
5049da5b 64.I "struct termio\ *"
fea681da 65instead of a
5049da5b 66.IR "struct termios\ *" .
52a5ae2b 67.IP
fea681da 68.BI "TCGETA struct termio *" argp
52a5ae2b 69.IP
fea681da 70.BI "TCSETA const struct termio *" argp
52a5ae2b 71.IP
fea681da 72.BI "TCSETAW const struct termio *" argp
52a5ae2b 73.IP
fea681da 74.BI "TCSETAF const struct termio *" argp
73d8cece 75.SS Locking the termios structure
4961e71d
MK
76The
77.I termios
132249c4 78structure of a terminal can be locked.
4961e71d
MK
79The lock is itself a
80.I termios
c7094399 81structure, with nonzero bits or fields indicating a
fea681da
MK
82locked value.
83.TP
84.BI "TIOCGLCKTRMIOS struct termios *" argp
4961e71d
MK
85Gets the locking status of the
86.I termios
87structure of the terminal.
fea681da
MK
88.TP
89.BI "TIOCSLCKTRMIOS const struct termios *" argp
4961e71d
MK
90Sets the locking status of the
91.I termios
92structure of the terminal.
cb476d88 93Only a process with the
c0b75059 94.BR CAP_SYS_ADMIN
cb476d88 95capability can do this.
73d8cece 96.SS Get and set window size
fea681da
MK
97Window sizes are kept in the kernel, but not used by the kernel
98(except in the case of virtual consoles, where the kernel will
99update the window size when the size of the virtual console changes,
75b94dc3 100for example, by loading a new font).
cba5091d
MK
101
102The following constants and structure are defined in
103.IR <sys/ioctl.h> .
fea681da
MK
104.TP
105.BI "TIOCGWINSZ struct winsize *" argp
106Get window size.
107.TP
108.BI "TIOCSWINSZ const struct winsize *" argp
109Set window size.
110.LP
111The struct used by these ioctls is defined as
112
3f89ebc0 113.in +4n
fea681da
MK
114.nf
115struct winsize {
cf0a9ace
MK
116 unsigned short ws_row;
117 unsigned short ws_col;
118 unsigned short ws_xpixel; /* unused */
119 unsigned short ws_ypixel; /* unused */
fea681da
MK
120};
121.fi
3f89ebc0 122.in
fea681da 123
8bd58774
MK
124When the window size changes, a
125.B SIGWINCH
126signal is sent to the
fea681da 127foreground process group.
73d8cece 128.SS Sending a break
fea681da
MK
129.TP
130.BI "TCSBRK int " arg
131Equivalent to
132.IR "tcsendbreak(fd, arg)" .
133.br
134If the terminal is using asynchronous serial data transmission, and
135.I arg
136is zero, then send a break (a stream of zero bits) for between
c13182ef
MK
1370.25 and 0.5 seconds.
138If the terminal is not using asynchronous
fea681da
MK
139serial data transmission, then either a break is sent, or the function
140returns without doing anything.
141When
142.I arg
c7094399 143is nonzero, nobody knows what will happen.
fea681da 144
72cedc06 145(SVr4, UnixWare, Solaris, Linux treat
fea681da 146.I "tcsendbreak(fd,arg)"
c7094399 147with nonzero
fea681da
MK
148.I arg
149like
150.IR "tcdrain(fd)" .
151SunOS treats
152.I arg
153as a multiplier, and sends a stream of bits
154.I arg
155times as long as done for zero
156.IR arg .
72cedc06 157DG/UX and AIX treat
fea681da 158.I arg
c7094399 159(when nonzero) as a time interval measured in milliseconds.
fea681da
MK
160HP-UX ignores
161.IR arg .)
162.TP
163.BI "TCSBRKP int " arg
097585ed
MK
164So-called "POSIX version" of
165.BR TCSBRK .
c7094399 166It treats nonzero
fea681da
MK
167.I arg
168as a timeinterval measured in deciseconds, and does nothing
169when the driver does not support breaks.
170.TP
0daa9e92 171.B "TIOCSBRK void"
fea681da
MK
172Turn break on, that is, start sending zero bits.
173.TP
0daa9e92 174.B "TIOCCBRK void"
fea681da 175Turn break off, that is, stop sending zero bits.
73d8cece 176.SS Software flow control
fea681da
MK
177.TP
178.BI "TCXONC int " arg
179Equivalent to
180.IR "tcflow(fd, arg)" .
181.br
182See
183.BR tcflow (3)
097585ed
MK
184for the argument values
185.BR TCOOFF ,
186.BR TCOON ,
187.BR TCIOFF ,
188.BR TCION .
73d8cece 189.SS Buffer count and flushing
fea681da
MK
190.TP
191.BI "FIONREAD int *" argp
192Get the number of bytes in the input buffer.
193.TP
194.BI "TIOCINQ int *" argp
097585ed
MK
195Same as
196.BR FIONREAD .
fea681da
MK
197.TP
198.BI "TIOCOUTQ int *" argp
199Get the number of bytes in the output buffer.
200.TP
201.BI "TCFLSH int " arg
202Equivalent to
203.IR "tcflush(fd, arg)" .
204.br
205See
206.BR tcflush (3)
097585ed
MK
207for the argument values
208.BR TCIFLUSH ,
209.BR TCOFLUSH ,
210.BR TCIOFLUSH .
73d8cece 211.SS Faking input
fea681da
MK
212.TP
213.BI "TIOCSTI const char *" argp
214Insert the given byte in the input queue.
73d8cece 215.SS Redirecting console output
fea681da 216.TP
0daa9e92 217.B "TIOCCONS void"
fea681da
MK
218Redirect output that would have gone to
219.I /dev/console
220or
221.I /dev/tty0
132249c4 222to the given terminal.
b218b023 223If that was a pseudoterminal master, send it to the slave.
b5fa38a3
MK
224In Linux before version 2.6.10,
225anybody can do this as long as the output was not redirected yet;
cb476d88 226since version 2.6.10, only a process with the
b5fa38a3 227.BR CAP_SYS_ADMIN
cb476d88 228capability may do this.
b5fa38a3 229If output was redirected already
097585ed
MK
230.B EBUSY
231is returned,
b5fa38a3 232but redirection can be stopped by using this ioctl with
fea681da
MK
233.I fd
234pointing at
235.I /dev/console
236or
237.IR /dev/tty0 .
73d8cece 238.SS Controlling terminal
fea681da
MK
239.TP
240.BI "TIOCSCTTY int " arg
132249c4 241Make the given terminal the controlling terminal of the calling process.
a1ffe9f5 242The calling process must be a session leader and not have a
132249c4 243controlling terminal already.
9ab0de3c
MK
244For this case,
245.I arg
246should be specified as zero.
c323f3a1 247
132249c4 248If this terminal is already the controlling terminal
5cc100b9 249of a different session group, then the ioctl fails with
097585ed 250.BR EPERM ,
cb476d88 251unless the caller has the
c0b75059 252.BR CAP_SYS_ADMIN
cb476d88 253capability and
fea681da 254.I arg
132249c4
MK
255equals 1, in which case the terminal is stolen, and all processes that had
256it as controlling terminal lose it.
fea681da 257.TP
17434a0d 258.B "TIOCNOTTY void"
132249c4
MK
259If the given terminal was the controlling terminal of the calling process,
260give up this controlling terminal.
c13182ef 261If the process was session leader,
8bd58774
MK
262then send
263.B SIGHUP
264and
265.B SIGCONT
266to the foreground process group
132249c4 267and all processes in the current session lose their controlling terminal.
73d8cece 268.SS Process group and session ID
fea681da
MK
269.TP
270.BI "TIOCGPGRP pid_t *" argp
271When successful, equivalent to
272.IR "*argp = tcgetpgrp(fd)" .
273.br
132249c4 274Get the process group ID of the foreground process group on this terminal.
fea681da
MK
275.TP
276.BI "TIOCSPGRP const pid_t *" argp
277Equivalent to
278.IR "tcsetpgrp(fd, *argp)" .
279.br
132249c4 280Set the foreground process group ID of this terminal.
fea681da
MK
281.TP
282.BI "TIOCGSID pid_t *" argp
132249c4 283Get the session ID of the given terminal.
097585ed
MK
284This will fail with
285.B ENOTTY
b218b023 286in case the terminal is not a master pseudoterminal
132249c4 287and not our controlling terminal.
c13182ef 288Strange.
73d8cece 289.SS Exclusive mode
fea681da 290.TP
0daa9e92 291.B "TIOCEXCL void"
132249c4 292Put the terminal into exclusive mode.
fea681da
MK
293No further
294.BR open (2)
295operations on the terminal are permitted.
097585ed
MK
296(They will fail with
297.BR EBUSY ,
cb476d88 298except for a process with the
c0b75059
MK
299.BR CAP_SYS_ADMIN
300capability.)
fea681da 301.TP
0daa9e92 302.B "TIOCNXCL void"
fea681da 303Disable exclusive mode.
73d8cece 304.SS Line discipline
fea681da
MK
305.TP
306.BI "TIOCGETD int *" argp
132249c4 307Get the line discipline of the terminal.
fea681da
MK
308.TP
309.BI "TIOCSETD const int *" argp
132249c4 310Set the line discipline of the terminal.
73d8cece 311.SS Pseudoterminal ioctls
fea681da
MK
312.TP
313.BI "TIOCPKT const int *" argp
314Enable (when
315.RI * argp
c7094399 316is nonzero) or disable packet mode.
b218b023 317Can be applied to the master side of a pseudoterminal only (and will return
097585ed
MK
318.B ENOTTY
319otherwise).
c13182ef 320In packet mode, each subsequent
fea681da 321.BR read (2)
c7094399 322will return a packet that either contains a single nonzero control byte,
f81fb444 323or has a single byte containing zero (\(aq\0\(aq) followed by data
b218b023 324written on the slave side of the pseudoterminal.
097585ed
MK
325If the first byte is not
326.B TIOCPKT_DATA
327(0), it is an OR of one
fea681da
MK
328or more of the following bits:
329
330.nf
331TIOCPKT_FLUSHREAD The read queue for the terminal is flushed.
332TIOCPKT_FLUSHWRITE The write queue for the terminal is flushed.
333TIOCPKT_STOP Output to the terminal is stopped.
334TIOCPKT_START Output to the terminal is restarted.
8bb93cd4
MK
335TIOCPKT_DOSTOP The start and stop characters are \fB^S\fP/\fB^Q\fP.
336TIOCPKT_NOSTOP The start and stop characters are not \fB^S\fP/\fB^Q\fP.
fea681da
MK
337.fi
338
339While this mode is in use, the presence
340of control status information to be read
341from the master side may be detected by a
342.BR select (2)
343for exceptional conditions.
344
345This mode is used by
346.BR rlogin (1)
347and
348.BR rlogind (8)
f81fb444 349to implement a remote-echoed,
8bb93cd4 350locally \fB^S\fP/\fB^Q\fP flow-controlled remote login.
fea681da 351
097585ed
MK
352The BSD ioctls
353.BR TIOCSTOP ,
354.BR TIOCSTART ,
355.BR TIOCUCNTL ,
0daa9e92 356.B TIOCREMOTE
fea681da 357have not been implemented under Linux.
73d8cece 358.SS Modem control
fea681da
MK
359.TP
360.BI "TIOCMGET int *" argp
2096c4f3 361Get the status of modem bits.
fea681da
MK
362.TP
363.BI "TIOCMSET const int *" argp
2096c4f3 364Set the status of modem bits.
fea681da
MK
365.TP
366.BI "TIOCMBIC const int *" argp
2096c4f3 367Clear the indicated modem bits.
fea681da
MK
368.TP
369.BI "TIOCMBIS const int *" argp
2096c4f3 370Set the indicated modem bits.
1dcf15dd
FM
371.TP
372.BI "TIOCMIWAIT int " arg
373Wait for any of the 4 modem bits (DCD, RI, DSR, CTS) to change.
374The mask is passed in arg for bits of interest (use |'ed
375TIOCM_RNG/DSR/CD/CTS for masking).
376Caller should use
377.B TIOCGICOUNT
378to see which one it was.
fea681da 379.LP
d398da7b 380The following bits are used by the above ioctls:
fea681da
MK
381
382.nf
383TIOCM_LE DSR (data set ready/line enable)
384TIOCM_DTR DTR (data terminal ready)
385TIOCM_RTS RTS (request to send)
386TIOCM_ST Secondary TXD (transmit)
387TIOCM_SR Secondary RXD (receive)
388TIOCM_CTS CTS (clear to send)
389TIOCM_CAR DCD (data carrier detect)
390TIOCM_CD see TIOCM_CAR
391TIOCM_RNG RNG (ring)
392TIOCM_RI see TIOCM_RNG
393TIOCM_DSR DSR (data set ready)
394.fi
1dcf15dd
FM
395.TP
396.BI "TIOCGICOUNT struct serial_icounter_struct *" argp
397Get counter of input serial line interrupts (DCD, RI, DSR, CTS).
398Write counters to the user passed
399.I argp
400serial_icounter_struct structure.
401
402NB: both 1->0 and 0->1 transitions are counted except for
403RI where only 0->1 is counted.
73d8cece 404.SS Marking a line as local
fea681da
MK
405.TP
406.BI "TIOCGSOFTCAR int *" argp
407("Get software carrier flag")
408Get the status of the CLOCAL flag in the c_cflag field of the
4961e71d
MK
409.I termios
410structure.
fea681da
MK
411.TP
412.BI "TIOCSSOFTCAR const int *" argp
413("Set software carrier flag")
4961e71d
MK
414Set the CLOCAL flag in the
415.I termios
416structure when
fea681da 417.RI * argp
c7094399 418is nonzero, and clear it otherwise.
fea681da 419.LP
097585ed
MK
420If the
421.B CLOCAL
422flag for a line is off, the hardware carrier detect (DCD)
fea681da
MK
423signal is significant, and an
424.BR open (2)
132249c4 425of the corresponding terminal will block until DCD is asserted,
097585ed
MK
426unless the
427.B O_NONBLOCK
428flag is given.
429If
430.B CLOCAL
431is set, the line behaves as if DCD is always asserted.
fea681da
MK
432The software carrier flag is usually turned on for local devices,
433and is off for lines with modems.
73d8cece 434.SS Linux-specific
097585ed
MK
435For the
436.B TIOCLINUX
437ioctl, see
fea681da 438.BR console_ioctl (4).
73d8cece 439.SS Kernel debugging
0daa9e92 440.B "#include <linux/tty.h>"
fea681da
MK
441.TP
442.BI "TIOCTTYGSTRUCT struct tty_struct *" argp
f88233dd
MK
443Get the
444.I tty_struct
445corresponding to
fea681da 446.IR fd .
c13182ef 447.\"
d282bb24 448.\" .SS Serial info
fea681da
MK
449.\" .BR "#include <linux/serial.h>"
450.\" .sp
451.\" .TP
452.\" .BI "TIOCGSERIAL struct serial_struct *" argp
453.\" Get serial info.
454.\" .TP
455.\" .BI "TIOCSSERIAL const struct serial_struct *" argp
456.\" Set serial info.
47297adb 457.SH RETURN VALUE
fea681da 458The
0b80cf56 459.BR ioctl (2)
c13182ef 460system call returns 0 on success.
dec985f9 461On error, it returns \-1 and sets
fea681da
MK
462.I errno
463appropriately.
fea681da
MK
464.SH ERRORS
465.TP
fea681da
MK
466.B EINVAL
467Invalid command parameter.
468.TP
eab64696
MK
469.B ENOIOCTLCMD
470Unknown command.
fea681da
MK
471.TP
472.B ENOTTY
473Inappropriate
474.IR fd .
eab64696
MK
475.TP
476.B EPERM
477Insufficient permission.
fea681da
MK
478.SH EXAMPLE
479Check the condition of DTR on the serial port.
480
481.nf
482#include <termios.h>
483#include <fcntl.h>
484#include <sys/ioctl.h>
485
cf0a9ace 486int
c13182ef 487main(void)
cf0a9ace 488{
fea681da
MK
489 int fd, serial;
490
491 fd = open("/dev/ttyS0", O_RDONLY);
492 ioctl(fd, TIOCMGET, &serial);
493 if (serial & TIOCM_DTR)
fea681da 494 puts("TIOCM_DTR is set");
e3f16cf7
MK
495 else
496 puts("TIOCM_DTR is not set");
fea681da
MK
497 close(fd);
498}
499.fi
47297adb 500.SH SEE ALSO
fea681da
MK
501.BR ioctl (2),
502.BR termios (3),
50c00f7e 503.BR console_ioctl (4),
88ab292b 504.BR pty (7)
25a46448 505.\"
fea681da
MK
506.\" FIONBIO const int *
507.\" FIONCLEX void
508.\" FIOCLEX void
509.\" FIOASYNC const int *
510.\" from serial.c:
511.\" TIOCSERCONFIG void
512.\" TIOCSERGWILD int *
513.\" TIOCSERSWILD const int *
514.\" TIOCSERGSTRUCT struct async_struct *
515.\" TIOCSERGETLSR int *
516.\" TIOCSERGETMULTI struct serial_multiport_struct *
517.\" TIOCSERSETMULTI const struct serial_multiport_struct *
518.\" TIOCGSERIAL, TIOCSSERIAL (see above)