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