1 .\" Copyright 2002 Walter Harms <walter.harms@informatik.uni-oldenburg.de>
2 .\" and Andries Brouwer <aeb@cwi.nl>.
3 .\" Distributed under GPL.
5 .\" Japanese Version Copyright (c) 2004 Yuichi SATO
6 .\" all rights reserved.
7 .\" Translated Sat Oct 16 06:08:24 JST 2004
8 .\" by Yuichi SATO <ysato444@yahoo.co.jp>
10 .TH TTY_IOCTL 4 2008-10-29 "Linux" "Linux Programmer's Manual"
12 tty_ioctl \- 端末とシリアルラインの ioctl (入出力制御)
14 .B "#include <termios.h>"
16 .BI "int ioctl(int " fd ", int " cmd ", ...);"
20 コールは、多くのコマンド引き数を受け付ける。
21 多くがいろいろな型の 3 番目の引き数を必要とする。
22 ここでは \fIargp\fP または \fIarg\fP と呼ぶ。
28 に記述されている POSIX インタフェースを使うこと。
31 .BI "TCGETS struct termios *" argp
32 .I "tcgetattr(fd, argp)"
37 .BI "TCSETS const struct termios *" argp
38 .I "tcsetattr(fd, TCSANOW, argp)"
43 .BI "TCSETSW const struct termios *" argp
44 .I "tcsetattr(fd, TCSADRAIN, argp)"
47 排出 (drain) を行うための出力バッファの使用を許可し、
50 .BI "TCSETSF const struct termios *" argp
51 .I "tcsetattr(fd, TCSAFLUSH, argp)"
54 排出 (drain) を行うための出力バッファの使用を許可し、
70 .BI "TCGETA struct termio *" argp
72 .BI "TCSETA const struct termio *" argp
74 .BI "TCSETAW const struct termio *" argp
76 .BI "TCSETAF const struct termio *" argp
84 0 でないビットまたはフィールドはロックされた値を示す。
86 .BI "TIOCGLCKTRMIOS struct termios *" argp
91 .BI "TIOCSLCKTRMIOS const struct termios *" argp
97 ケーパビリティを持つプロセス) がこれを実行できる。
99 ウィンドウサイズはカーネル内に保持されるが、
101 (仮想コンソールの場合は例外であり、新しいフォントを読み込んだ場合など、
102 仮想端末のサイズが変更された場合、カーネルはウィンドウサイズを更新する)。
108 .BI "TIOCGWINSZ struct winsize *" argp
111 .BI "TIOCSWINSZ const struct winsize *" argp
114 これらの ioctl で使用される構造体は、以下のように定義される。
119 unsigned short ws_row;
120 unsigned short ws_col;
121 unsigned short ws_xpixel; /* 未使用 */
122 unsigned short ws_ypixel; /* 未使用 */
133 .BI "TCSBRK int " arg
134 .I "tcsendbreak(fd, arg)"
137 端末が非同期シリアルデータ転送を使用しており、
139 が 0 の場合、0.25 から 0.5 秒の間に
140 break (0 のビット列のストリーム) が送信される。
141 端末が非同期シリアルデータ転送を使用している場合、
142 break が送信されるか、この関数は何もせずに返る。
144 が 0 以外の場合、何が起こるか分からない。
146 (SVr4, UnixWare, Solaris, Linux は、
147 .I "tcsendbreak(fd,arg)"
160 DG/UX と AIX は、(0 以外の場合)
167 .BI "TCSBRKP int " arg
173 を 1/10 秒単位の時間間隔として扱う。
174 またドライバが break をサポートしていない場合は、何もしない。
185 .BI "TCXONC int " arg
196 .SS "バッファのカウントと書き出し (flush)"
198 .BI "FIONREAD int *" argp
201 .BI "TIOCINQ int *" argp
205 .BI "TIOCOUTQ int *" argp
208 .BI "TCFLSH int " arg
209 .I "tcflush(fd, arg)"
220 .BI "TIOCSTI const char *" argp
228 に送られる出力を、指定された端末リダイレクトする。
229 指定された端末が疑似端末 (pseudoterminal) のマスタの場合、
231 バージョン 2.6.10 より前の Linux では、出力がまだリダイレクトされて
232 いなければ、誰でもリダイレクトを行うことができる。
233 バージョン 2.6.10 以降では、root
235 ケーパビリティを持つプロセス) だけがリダイレクトを行うことができる。
244 に対してこの ioctl を使用することで、リダイレクトを止めることができる。
247 .BI "TIOCSCTTY int " arg
248 指定された端末を呼び出し元のプロセスの制御端末にする。
249 呼び出し元のプロセスはセッションリーダでなければならず、
251 この端末が既に他のセッショングループの制御端末である場合、
254 で失敗する。ただし呼び出したユーザが root で
260 この場合、端末は盗まれ (stolen)、
261 この端末を制御端末としていた全てのプロセスは端末を失う。
264 指定された端末が呼び出し元のプロセスの制御端末である場合、
271 を送り、カレントセッションの全てのプロセスは制御端末を失う。
272 .SS "グループ ID とセッション ID の処理"
274 .BI "TIOCGPGRP pid_t *" argp
276 .I "*argp = tcgetpgrp(fd)"
279 この端末上のフォアグラウンドプロセスのプロセスグループ ID を取得する。
281 .BI "TIOCSPGRP const pid_t *" argp
282 .I "tcsetpgrp(fd, *argp)"
285 この端末のフォアグラウンドプロセスのグループ ID を設定する。
287 .BI "TIOCGSID pid_t *" argp
288 指定された端末のセッション ID を取得する。
289 端末がマスタ疑似端末または制御端末でない場合は、
302 ケーパビリティを持たないプロセスの場合、これ以降の
310 .SS "ライン制御 (line discipline)"
312 .BI "TIOCGETD int *" argp
315 .BI "TIOCSETD const int *" argp
319 .BI "TIOCPKT const int *" argp
323 疑似端末のマスタ側にのみ適用できる (それ以外の場合は
328 は、値が 0 以外の 1 つの制御バイトを含むパケットか、
329 値が 0 の 1 バイト (\(aq\\0\(aq) に疑似端末のスレーブ側で書き込まれた
333 (0) でない場合、以下のビットの 1 つ以上を OR したものである:
336 TIOCPKT_FLUSHREAD 端末の読み込みキューがフラッシュ (flush) される。
337 TIOCPKT_FLUSHWRITE 端末の書き出しキューがフラッシュされる。
338 TIOCPKT_STOP 端末への出力が停止される。
339 TIOCPKT_START 端末への出力が再開される。
340 TIOCPKT_DOSTOP 開始文字と終了文字が \fB^S\fP/\fB^Q\fP である。
341 TIOCPKT_NOSTOP 開始文字と終了文字が \fB^S\fP/\fB^Q\fP でない。
345 制御状態情報の存在がマスタ側から読み込めるかは、
354 で使われ、リモートエコーのリモートログインと
355 ローカルでの \fB^S\fP/\fB^Q\fP フロー制御のリモートログインを実装している。
365 .BI "TIOCMGET int *" argp
368 .BI "TIOCMSET const int *" argp
371 .BI "TIOCMBIC const int *" argp
374 .BI "TIOCMBIS const int *" argp
377 これらの 4 つの ioctl で使われるビットは以下の通り:
380 TIOCM_LE DSR (data set ready/line enable)
381 TIOCM_DTR DTR (data terminal ready)
382 TIOCM_RTS RTS (request to send)
383 TIOCM_ST Secondary TXD (transmit)
384 TIOCM_SR Secondary RXD (receive)
385 TIOCM_CTS CTS (clear to send)
386 TIOCM_CAR DCD (data carrier detect)
387 TIOCM_CD TIOCM_CAR を参照。
389 TIOCM_RI TIOCM_RNG を参照。
390 TIOCM_DSR DSR (data set ready)
392 .SS "回線をローカルとしてマークする"
394 .BI "TIOCGSOFTCAR int *" argp
401 .BI "TIOCSSOFTCAR const int *" argp
414 ハードウェアキャリア検出 (hardware carrier detect, DCD) シグナルが重要であり、
418 は DCD が示されるまでブロックされる。
421 ラインは常に DCD が示されているかのように動作する。
422 ソフトウェアキャリアフラグは、ローカルデバイスでは通常はオンになっており、
424 .SS "Linux 固有の ioctl"
427 .BR console_ioctl (4)
430 .B "#include <linux/tty.h>"
432 .BI "TIOCTTYGSTRUCT struct tty_struct *" argp
438 .\" .BR "#include <linux/serial.h>"
441 .\" .BI "TIOCGSERIAL struct serial_struct *" argp
444 .\" .BI "TIOCSSERIAL const struct serial_struct *" argp
448 システムコールは、成功した場合は 0 を返す。
467 シリアルポートの DTR の状態をチェックする。
472 #include <sys/ioctl.h>
479 fd = open("/dev/ttyS0", O_RDONLY);
480 ioctl(fd, TIOCMGET, &serial);
481 if (serial & TIOCM_DTR)
482 puts("TIOCM_DTR が設定されていない。");
484 puts("TIOCM_DTR が設定されている。");
491 .BR console_ioctl (4),
494 .\" FIONBIO const int *
497 .\" FIOASYNC const int *
499 .\" TIOCSERCONFIG void
500 .\" TIOCSERGWILD int *
501 .\" TIOCSERSWILD const int *
502 .\" TIOCSERGSTRUCT struct async_struct *
503 .\" TIOCSERGETLSR int *
504 .\" TIOCSERGETMULTI struct serial_multiport_struct *
505 .\" TIOCSERSETMULTI const struct serial_multiport_struct *
506 .\" TIOCGSERIAL, TIOCSSERIAL (上記を参照)