1 .\" Copyright 2002 Walter Harms <walter.harms@informatik.uni-oldenburg.de>
2 .\" and Andries Brouwer <aeb@cwi.nl>.
4 .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
5 .\" Distributed under GPL.
8 .\"*******************************************************************
10 .\" This file was generated with po4a. Translate the source file.
12 .\"*******************************************************************
13 .TH TTY_IOCTL 4 2008\-10\-29 Linux "Linux Programmer's Manual"
15 tty_ioctl \- 端末とシリアルラインの ioctl (入出力制御)
17 \fB#include <termios.h>\fP
19 \fBint ioctl(int \fP\fIfd\fP\fB, int \fP\fIcmd\fP\fB, ...);\fP
21 端末とシリアルポートについての \fBioctl\fP(2) コールは、多くのコマンド引き数を受け付ける。 多くがいろいろな型の 3
22 番目の引き数を必要とする。 ここでは \fIargp\fP または \fIarg\fP と呼ぶ。
24 \fIioctl\fP を使用すると移植性のないプログラムになる。 可能な場合は、 \fBtermios\fP(3) に記述されている POSIX
28 \fBTCGETS struct termios *\fP\fIargp\fP
29 \fItcgetattr(fd, argp)\fP と同じ。
33 \fBTCSETS const struct termios *\fP\fIargp\fP
34 \fItcsetattr(fd, TCSANOW, argp)\fP と同じ。
38 \fBTCSETSW const struct termios *\fP\fIargp\fP
39 \fItcsetattr(fd, TCSADRAIN, argp)\fP と同じ。
41 排出 (drain) を行うための出力バッファの使用を許可し、 現在のシリアルポートの設定を変更する。
43 \fBTCSETSF const struct termios *\fP\fIargp\fP
44 \fItcsetattr(fd, TCSAFLUSH, argp)\fP と同じ。
46 排出 (drain) を行うための出力バッファの使用を許可し、 処理していない入力を破棄して、 現在のシリアルポートの設定を変更する。
48 以下の 4 つの ioctl は \fBTCGETS\fP, \fBTCSETS\fP, \fBTCSETSW\fP, \fBTCSETSF\fP と似ている。 ただし、
49 \fIstruct termios *\fP の代わりに \fIstruct termio *\fP を取る。
51 \fBTCGETA struct termio *\fP\fIargp\fP
53 \fBTCSETA const struct termio *\fP\fIargp\fP
55 \fBTCSETAW const struct termio *\fP\fIargp\fP
57 \fBTCSETAF const struct termio *\fP\fIargp\fP
59 端末の \fItermios\fP 構造体はロックすることが可能である。 このロック自体は \fItermios\fP 構造体であり、 0
60 でないビットまたはフィールドはロックされた値を示す。
62 \fBTIOCGLCKTRMIOS struct termios *\fP\fIargp\fP
63 端末の \fItermios\fP 構造体のロック状態を取得する。
65 \fBTIOCSLCKTRMIOS const struct termios *\fP\fIargp\fP
66 端末の \fItermios\fP 構造体のロック状態を設定する。 root のみ (より正確には、 \fBCAP_SYS_ADMIN\fP
67 ケーパビリティを持つプロセス) がこれを実行できる。
69 ウィンドウサイズはカーネル内に保持されるが、 カーネルによって使用されない (仮想コンソールの場合は例外であり、新しいフォントを読み込んだ場合など、
70 仮想端末のサイズが変更された場合、カーネルはウィンドウサイズを更新する)。
72 以下の定数と構造体は \fI<sys/ioctl.h>\fP で定義されている。
74 \fBTIOCGWINSZ struct winsize *\fP\fIargp\fP
77 \fBTIOCSWINSZ const struct winsize *\fP\fIargp\fP
80 これらの ioctl で使用される構造体は、以下のように定義される。
85 unsigned short ws_row;
86 unsigned short ws_col;
87 unsigned short ws_xpixel; /* 未使用 */
88 unsigned short ws_ypixel; /* 未使用 */
93 ウィンドウサイズが変更された場合、 フォアグラウンドプロセスグループに \fBSIGWINCH\fP シグナルが送られる。
96 \fBTCSBRK int \fP\fIarg\fP
97 \fItcsendbreak(fd, arg)\fP と同じ。
99 端末が非同期シリアルデータ転送を使用しており、 \fIarg\fP が 0 の場合、0.25 から 0.5 秒の間に break (0
100 のビット列のストリーム) が送信される。 端末が非同期シリアルデータ転送を使用している場合、 break が送信されるか、この関数は何もせずに返る。
101 \fIarg\fP が 0 以外の場合、何が起こるか分からない。
103 (SVr4, UnixWare, Solaris, Linux は、 \fItcsendbreak(fd,arg)\fP の \fIarg\fP が 0
104 以外の場合、 \fItcdrain(fd)\fP のように扱う。 SunOS は \fIarg\fP を倍数として扱い、ビットのストリームを \fIarg\fP
105 回送信する。 \fIarg\fP が 0 の場合も同じ。 DG/UX と AIX は、(0 以外の場合) \fIarg\fP をミリ秒単位の時間間隔として扱う。
106 HP\-UX は \fIarg\fP を無視する。)
108 \fBTCSBRKP int \fP\fIarg\fP
109 いわゆる「POSIX 版」の \fBTCSBRK\fP である。 これは 0 以外の \fIarg\fP を 1/10 秒単位の時間間隔として扱う。 またドライバが
110 break をサポートしていない場合は、何もしない。
113 break をオンにする。 つまり 0 のビット列の送信を開始する。
116 break をオフにする。 つまり 0 のビット列の送信を停止する。
119 \fBTCXONC int \fP\fIarg\fP
120 \fItcflow(fd, arg)\fP と同じ。
122 \fBtcflow\fP(3) の引き数 \fBTCOOFF\fP, \fBTCOON\fP, \fBTCIOFF\fP, \fBTCION\fP を参照すること。
123 .SS "バッファのカウントと書き出し (flush)"
125 \fBFIONREAD int *\fP\fIargp\fP
128 \fBTIOCINQ int *\fP\fIargp\fP
131 \fBTIOCOUTQ int *\fP\fIargp\fP
134 \fBTCFLSH int \fP\fIarg\fP
135 \fItcflush(fd, arg)\fP と同じ。
137 \fBtcflush\fP(3) の引き数 \fBTCIFLUSH\fP, \fBTCOFLUSH\fP, \fBTCIOFLUSH\fP を参照すること。
140 \fBTIOCSTI const char *\fP\fIargp\fP
145 \fI/dev/console\fP または \fI/dev/tty0\fP に送られる出力を、指定された端末リダイレクトする。 指定された端末が疑似端末
146 (pseudoterminal) のマスタの場合、 出力はスレーブに送られる。 バージョン 2.6.10 より前の Linux
147 では、出力がまだリダイレクトされて いなければ、誰でもリダイレクトを行うことができる。 バージョン 2.6.10 以降では、root
148 (\fBCAP_SYS_ADMIN\fP ケーパビリティを持つプロセス) だけがリダイレクトを行うことができる。 出力がすでにリダイレクトされている場合は
149 \fBEBUSY\fP が返されるが、 \fI/dev/console\fP か \fI/dev/tty0\fP を指している \fIfd\fP に対してこの ioctl
150 を使用することで、リダイレクトを止めることができる。
153 \fBTIOCSCTTY int \fP\fIarg\fP
154 指定された端末を呼び出し元のプロセスの制御端末にする。 呼び出し元のプロセスはセッションリーダでなければならず、
155 かつ既に制御端末を持っていてはならない。 この端末が既に他のセッショングループの制御端末である場合、 ioctl は \fBEPERM\fP
156 で失敗する。ただし呼び出したユーザが root で (より正確には \fBCAP_SYS_ADMIN\fP ケーパビリティを持っていて)、かつ \fIarg\fP
157 が 1 である場合を除く。 この場合、端末は盗まれ (stolen)、 この端末を制御端末としていた全てのプロセスは端末を失う。
160 指定された端末が呼び出し元のプロセスの制御端末である場合、 この制御端末を放棄する。 プロセスがセッションリーダの場合、
161 フォアグラウンドプロセスグループに \fBSIGHUP\fP と \fBSIGCONT\fP を送り、カレントセッションの全てのプロセスは制御端末を失う。
162 .SS "グループ ID とセッション ID の処理"
164 \fBTIOCGPGRP pid_t *\fP\fIargp\fP
165 成功した場合、 \fI*argp = tcgetpgrp(fd)\fP と同じ。
167 この端末上のフォアグラウンドプロセスのプロセスグループ ID を取得する。
169 \fBTIOCSPGRP const pid_t *\fP\fIargp\fP
170 \fItcsetpgrp(fd, *argp)\fP と同じ。
172 この端末のフォアグラウンドプロセスのグループ ID を設定する。
174 \fBTIOCGSID pid_t *\fP\fIargp\fP
175 指定された端末のセッション ID を取得する。 端末がマスタ疑似端末または制御端末でない場合は、 \fBENOTTY\fP で失敗する。 奇妙だ。
179 端末を排他モードにする。 端末に対して、これ以降の \fBopen\fP(2) 操作を禁止する。 (root 以外の場合、つまり
180 \fBCAP_SYS_ADMIN\fP ケーパビリティを持たないプロセスの場合、これ以降の \fBopen\fP(2) は \fBEBUSY\fP で失敗する。)
184 .SS "ライン制御 (line discipline)"
186 \fBTIOCGETD int *\fP\fIargp\fP
189 \fBTIOCSETD const int *\fP\fIargp\fP
193 \fBTIOCPKT const int *\fP\fIargp\fP
194 パケットモードを有効 (*\fIargp\fP が 0 以外の場合) または無効にする。 疑似端末のマスタ側にのみ適用できる (それ以外の場合は
195 \fBENOTTY\fP を返す)。 パケットモードでは、その後に実行される \fBread\fP(2) は、値が 0 以外の 1
196 つの制御バイトを含むパケットか、 値が 0 の 1 バイト (\(aq\e0\(aq) に疑似端末のスレーブ側で書き込まれた
197 データが続くパケットを返す。 最初のバイトが \fBTIOCPKT_DATA\fP (0) でない場合、以下のビットの 1 つ以上を OR したものである:
200 TIOCPKT_FLUSHREAD 端末の読み込みキューがフラッシュ (flush) される。
201 TIOCPKT_FLUSHWRITE 端末の書き出しキューがフラッシュされる。
202 TIOCPKT_STOP 端末への出力が停止される。
203 TIOCPKT_START 端末への出力が再開される。
204 TIOCPKT_DOSTOP 開始文字と終了文字が \fB^S\fP/\fB^Q\fP である。
205 TIOCPKT_NOSTOP 開始文字と終了文字が \fB^S\fP/\fB^Q\fP でない。
208 このモードが使われている場合、 制御状態情報の存在がマスタ側から読み込めるかは、 例外的な条件で \fBselect\fP(2)
211 このモードは \fBrlogin\fP(1) と \fBrlogind\fP(8) で使われ、リモートエコーのリモートログインと ローカルでの
212 \fB^S\fP/\fB^Q\fP フロー制御のリモートログインを実装している。
214 BSD の ioctl である \fBTIOCSTOP\fP, \fBTIOCSTART\fP, \fBTIOCUCNTL\fP, \fBTIOCREMOTE\fP
218 \fBTIOCMGET int *\fP\fIargp\fP
221 \fBTIOCMSET const int *\fP\fIargp\fP
224 \fBTIOCMBIC const int *\fP\fIargp\fP
227 \fBTIOCMBIS const int *\fP\fIargp\fP
230 これらの 4 つの ioctl で使われるビットは以下の通り:
233 TIOCM_LE DSR (data set ready/line enable)
234 TIOCM_DTR DTR (data terminal ready)
235 TIOCM_RTS RTS (request to send)
236 TIOCM_ST Secondary TXD (transmit)
237 TIOCM_SR Secondary RXD (receive)
238 TIOCM_CTS CTS (clear to send)
239 TIOCM_CAR DCD (data carrier detect)
240 TIOCM_CD TIOCM_CAR を参照。
242 TIOCM_RI TIOCM_RNG を参照。
243 TIOCM_DSR DSR (data set ready)
247 \fBTIOCGSOFTCAR int *\fP\fIargp\fP
248 ("ソフトウェアキャリアフラグの取得") \fItermios\fP 構造体の c_cflag フィールドの \fBCLOCAL\fP フラグの状態を取得する。
250 \fBTIOCSSOFTCAR const int *\fP\fIargp\fP
251 ("ソフトウェアキャリアフラグの設定") *\fIargp\fP が 0 以外の場合、 \fItermios\fP 構造体の \fBCLOCAL\fP
252 フラグを設定する。 0 の場合はクリアする。
254 ラインの \fBCLOCAL\fP フラグがオフの場合、 ハードウェアキャリア検出 (hardware carrier detect, DCD)
255 シグナルが重要であり、 \fBO_NONBLOCK\fP フラグが指定されない限り、対応する端末の \fBopen\fP(2) は DCD
256 が示されるまでブロックされる。 \fBCLOCAL\fP が設定されている場合、 ラインは常に DCD が示されているかのように動作する。
257 ソフトウェアキャリアフラグは、ローカルデバイスでは通常はオンになっており、 モデムのラインではオフになっている。
258 .SS "Linux 固有の ioctl"
259 \fBTIOCLINUX\fP ioctl については、 \fBconsole_ioctl\fP(4) を参照すること。
261 \fB#include <linux/tty.h>\fP
263 \fBTIOCTTYGSTRUCT struct tty_struct *\fP\fIargp\fP
265 .\" .SS "Serial info"
266 .\" .BR "#include <linux/serial.h>"
269 .\" .BI "TIOCGSERIAL struct serial_struct *" argp
272 .\" .BI "TIOCSSERIAL const struct serial_struct *" argp
274 \fIfd\fP に対応する \fItty_struct\fP を取得する。
276 \fBioctl\fP(2) システムコールは、成功した場合は 0 を返す。 エラーの場合は \-1 を返し、 \fIerrno\fP を適切に設定する。
291 シリアルポートの DTR の状態をチェックする。
296 #include <sys/ioctl.h>
303 fd = open("/dev/ttyS0", O_RDONLY);
304 ioctl(fd, TIOCMGET, &serial);
305 if (serial & TIOCM_DTR)
306 puts("TIOCM_DTR が設定されていない。");
308 puts("TIOCM_DTR が設定されている。");
314 .\" FIONBIO const int *
317 .\" FIOASYNC const int *
319 .\" TIOCSERCONFIG void
320 .\" TIOCSERGWILD int *
321 .\" TIOCSERSWILD const int *
322 .\" TIOCSERGSTRUCT struct async_struct *
323 .\" TIOCSERGETLSR int *
324 .\" TIOCSERGETMULTI struct serial_multiport_struct *
325 .\" TIOCSERSETMULTI const struct serial_multiport_struct *
326 .\" TIOCGSERIAL, TIOCSSERIAL (see above)
327 \fBioctl\fP(2), \fBtermios\fP(3), \fBconsole_ioctl\fP(4), \fBpty\fP(7)
329 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
330 である。プロジェクトの説明とバグ報告に関する情報は
331 http://www.kernel.org/doc/man\-pages/ に書かれている。