OSDN Git Service

(split) LDP: Restore and add Copyrights for draft pages
[linuxjm/LDP_man-pages.git] / draft / man4 / tty_ioctl.4
1 .\" Copyright 2002 Walter Harms <walter.harms@informatik.uni-oldenburg.de>
2 .\" and Andries Brouwer <aeb@cwi.nl>.
3 .\"
4 .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
5 .\" Distributed under GPL
6 .\" %%%LICENSE_END
7 .\"
8 .\"*******************************************************************
9 .\"
10 .\" This file was generated with po4a. Translate the source file.
11 .\"
12 .\"*******************************************************************
13 .\"
14 .\" Japanese Version Copyright (c) 2004 Yuichi SATO
15 .\"         all rights reserved.
16 .\" Translated Sat Oct 16 06:08:24 JST 2004
17 .\"         by Yuichi SATO <ysato444@yahoo.co.jp>
18 .\"
19 .TH TTY_IOCTL 4 2008\-10\-29 Linux "Linux Programmer's Manual"
20 .SH 名前
21 tty_ioctl \- 端末とシリアルラインの ioctl (入出力制御)
22 .SH 書式
23 \fB#include <termios.h>\fP
24 .sp
25 \fBint ioctl(int \fP\fIfd\fP\fB, int \fP\fIcmd\fP\fB, ...);\fP
26 .SH 説明
27 端末とシリアルポートについての \fBioctl\fP(2)  コールは、多くのコマンド引き数を受け付ける。 多くがいろいろな型の 3
28 番目の引き数を必要とする。 ここでは \fIargp\fP または \fIarg\fP と呼ぶ。
29 .LP
30 \fIioctl\fP を使用すると移植性のないプログラムになる。 可能な場合は、 \fBtermios\fP(3)  に記述されている POSIX
31 インタフェースを使うこと。
32 .SS 端末属性の取得と設定
33 .TP 
34 \fBTCGETS       struct termios *\fP\fIargp\fP
35 \fItcgetattr(fd, argp)\fP と同じ。
36 .br
37 現在のシリアルポートの設定を取得する。
38 .TP 
39 \fBTCSETS       const struct termios *\fP\fIargp\fP
40 \fItcsetattr(fd, TCSANOW, argp)\fP と同じ。
41 .br
42 現在のシリアルポートの設定を変更する。
43 .TP 
44 \fBTCSETSW      const struct termios *\fP\fIargp\fP
45 \fItcsetattr(fd, TCSADRAIN, argp)\fP と同じ。
46 .br
47 排出 (drain) を行うための出力バッファの使用を許可し、 現在のシリアルポートの設定を変更する。
48 .TP 
49 \fBTCSETSF      const struct termios *\fP\fIargp\fP
50 \fItcsetattr(fd, TCSAFLUSH, argp)\fP と同じ。
51 .br
52 排出 (drain) を行うための出力バッファの使用を許可し、 処理していない入力を破棄して、 現在のシリアルポートの設定を変更する。
53 .LP
54 以下の 4 つの ioctl は \fBTCGETS\fP, \fBTCSETS\fP, \fBTCSETSW\fP, \fBTCSETSF\fP と似ている。 ただし、
55 \fIstruct termios\ *\fP の代わりに \fIstruct termio\ *\fP を取る。
56 .IP
57 \fBTCGETA       struct termio *\fP\fIargp\fP
58 .IP
59 \fBTCSETA       const struct termio *\fP\fIargp\fP
60 .IP
61 \fBTCSETAW      const struct termio *\fP\fIargp\fP
62 .IP
63 \fBTCSETAF      const struct termio *\fP\fIargp\fP
64 .SS "termios 構造体のロック"
65 端末の \fItermios\fP 構造体はロックすることが可能である。 このロック自体は \fItermios\fP 構造体であり、 0
66 でないビットまたはフィールドはロックされた値を示す。
67 .TP 
68 \fBTIOCGLCKTRMIOS       struct termios *\fP\fIargp\fP
69 端末の \fItermios\fP 構造体のロック状態を取得する。
70 .TP 
71 \fBTIOCSLCKTRMIOS       const struct termios *\fP\fIargp\fP
72 端末の \fItermios\fP 構造体のロック状態を設定する。 root のみ (より正確には、 \fBCAP_SYS_ADMIN\fP
73 ケーパビリティを持つプロセス) がこれを実行できる。
74 .SS ウィンドウサイズの取得と設定
75 ウィンドウサイズはカーネル内に保持されるが、 カーネルによって使用されない (仮想コンソールの場合は例外であり、新しいフォントを読み込んだ場合など、
76 仮想端末のサイズが変更された場合、カーネルはウィンドウサイズを更新する)。
77
78 以下の定数と構造体は \fI<sys/ioctl.h>\fP で定義されている。
79 .TP 
80 \fBTIOCGWINSZ   struct winsize *\fP\fIargp\fP
81 ウィンドウサイズを取得する。
82 .TP 
83 \fBTIOCSWINSZ   const struct winsize *\fP\fIargp\fP
84 ウィンドウサイズを設定する。
85 .LP
86 これらの ioctl で使用される構造体は、以下のように定義される。
87
88 .in +4n
89 .nf
90 struct winsize {
91     unsigned short ws_row;
92     unsigned short ws_col;
93     unsigned short ws_xpixel;   /* 未使用 */
94     unsigned short ws_ypixel;   /* 未使用 */
95 };
96 .fi
97 .in
98
99 ウィンドウサイズが変更された場合、 フォアグラウンドプロセスグループに \fBSIGWINCH\fP シグナルが送られる。
100 .SS "break の送信"
101 .TP 
102 \fBTCSBRK       int \fP\fIarg\fP
103 \fItcsendbreak(fd, arg)\fP と同じ。
104 .br
105 端末が非同期シリアルデータ転送を使用しており、 \fIarg\fP が 0 の場合、0.25 から 0.5 秒の間に break (0
106 のビット列のストリーム) が送信される。 端末が非同期シリアルデータ転送を使用している場合、 break が送信されるか、この関数は何もせずに返る。
107 \fIarg\fP が 0 以外の場合、何が起こるか分からない。
108
109 (SVr4, UnixWare, Solaris, Linux は、 \fItcsendbreak(fd,arg)\fP の \fIarg\fP が 0
110 以外の場合、 \fItcdrain(fd)\fP のように扱う。 SunOS は \fIarg\fP を倍数として扱い、ビットのストリームを \fIarg\fP
111 回送信する。 \fIarg\fP が 0 の場合も同じ。 DG/UX と AIX は、(0 以外の場合)  \fIarg\fP をミリ秒単位の時間間隔として扱う。
112 HP\-UX は \fIarg\fP を無視する。)
113 .TP 
114 \fBTCSBRKP      int \fP\fIarg\fP
115 いわゆる「POSIX 版」の \fBTCSBRK\fP である。 これは 0 以外の \fIarg\fP を 1/10 秒単位の時間間隔として扱う。 またドライバが
116 break をサポートしていない場合は、何もしない。
117 .TP 
118 \fBTIOCSBRK     void\fP
119 break をオンにする。 つまり 0 のビット列の送信を開始する。
120 .TP 
121 \fBTIOCCBRK     void\fP
122 break をオフにする。 つまり 0 のビット列の送信を停止する。
123 .SS ソフトウェアフロー制御
124 .TP 
125 \fBTCXONC       int \fP\fIarg\fP
126 \fItcflow(fd, arg)\fP と同じ。
127 .br
128 \fBtcflow\fP(3)  の引き数 \fBTCOOFF\fP, \fBTCOON\fP, \fBTCIOFF\fP, \fBTCION\fP を参照すること。
129 .SS "バッファのカウントと書き出し (flush)"
130 .TP 
131 \fBFIONREAD     int *\fP\fIargp\fP
132 入力バッファにあるバイト数を取得する。
133 .TP 
134 \fBTIOCINQ      int *\fP\fIargp\fP
135 \fBFIONREAD\fP と同じ。
136 .TP 
137 \fBTIOCOUTQ     int *\fP\fIargp\fP
138 出力バッファにあるバイト数を取得する。
139 .TP 
140 \fBTCFLSH       int \fP\fIarg\fP
141 \fItcflush(fd, arg)\fP と同じ。
142 .br
143 \fBtcflush\fP(3)  の引き数 \fBTCIFLUSH\fP, \fBTCOFLUSH\fP, \fBTCIOFLUSH\fP を参照すること。
144 .SS 入力の偽装
145 .TP 
146 \fBTIOCSTI      const char *\fP\fIargp\fP
147 指定されたバイトを入力キューに挿入する。
148 .SS コンソール出力のリダイレクト
149 .TP 
150 \fBTIOCCONS     void\fP
151 \fI/dev/console\fP または \fI/dev/tty0\fP に送られる出力を、指定された端末リダイレクトする。 指定された端末が疑似端末
152 (pseudoterminal) のマスタの場合、 出力はスレーブに送られる。 バージョン 2.6.10 より前の Linux
153 では、出力がまだリダイレクトされて いなければ、誰でもリダイレクトを行うことができる。 バージョン 2.6.10 以降では、root
154 (\fBCAP_SYS_ADMIN\fP ケーパビリティを持つプロセス) だけがリダイレクトを行うことができる。 出力がすでにリダイレクトされている場合は
155 \fBEBUSY\fP が返されるが、 \fI/dev/console\fP か \fI/dev/tty0\fP を指している \fIfd\fP に対してこの ioctl
156 を使用することで、リダイレクトを止めることができる。
157 .SS 端末の制御
158 .TP 
159 \fBTIOCSCTTY    int \fP\fIarg\fP
160 指定された端末を呼び出し元のプロセスの制御端末にする。 呼び出し元のプロセスはセッションリーダでなければならず、
161 かつ既に制御端末を持っていてはならない。 この端末が既に他のセッショングループの制御端末である場合、 ioctl は \fBEPERM\fP
162 で失敗する。ただし呼び出したユーザが root で (より正確には \fBCAP_SYS_ADMIN\fP ケーパビリティを持っていて)、かつ \fIarg\fP
163 が 1 である場合を除く。 この場合、端末は盗まれ (stolen)、 この端末を制御端末としていた全てのプロセスは端末を失う。
164 .TP 
165 \fBTIOCNOTTY    void\fP
166 指定された端末が呼び出し元のプロセスの制御端末である場合、 この制御端末を放棄する。 プロセスがセッションリーダの場合、
167 フォアグラウンドプロセスグループに \fBSIGHUP\fP と \fBSIGCONT\fP を送り、カレントセッションの全てのプロセスは制御端末を失う。
168 .SS "グループ ID とセッション ID の処理"
169 .TP 
170 \fBTIOCGPGRP    pid_t *\fP\fIargp\fP
171 成功した場合、 \fI*argp = tcgetpgrp(fd)\fP と同じ。
172 .br
173 この端末上のフォアグラウンドプロセスのプロセスグループ ID を取得する。
174 .TP 
175 \fBTIOCSPGRP    const pid_t *\fP\fIargp\fP
176 \fItcsetpgrp(fd, *argp)\fP と同じ。
177 .br
178 この端末のフォアグラウンドプロセスのグループ ID を設定する。
179 .TP 
180 \fBTIOCGSID     pid_t *\fP\fIargp\fP
181 指定された端末のセッション ID を取得する。 端末がマスタ疑似端末または制御端末でない場合は、 \fBENOTTY\fP で失敗する。 奇妙だ。
182 .SS 排他モード
183 .TP 
184 \fBTIOCEXCL     void\fP
185 端末を排他モードにする。 端末に対して、これ以降の \fBopen\fP(2)  操作を禁止する。 (root 以外の場合、つまり
186 \fBCAP_SYS_ADMIN\fP ケーパビリティを持たないプロセスの場合、これ以降の \fBopen\fP(2)  は \fBEBUSY\fP で失敗する。)
187 .TP 
188 \fBTIOCNXCL     void\fP
189 排他モードを無効にする。
190 .SS "ライン制御 (line discipline)"
191 .TP 
192 \fBTIOCGETD     int *\fP\fIargp\fP
193 端末のライン制御の情報を取得する。
194 .TP 
195 \fBTIOCSETD     const int *\fP\fIargp\fP
196 端末のライン制御の情報を設定する。
197 .SS "疑似端末の ioctl"
198 .TP 
199 \fBTIOCPKT      const int *\fP\fIargp\fP
200 パケットモードを有効 (*\fIargp\fP が 0 以外の場合) または無効にする。 疑似端末のマスタ側にのみ適用できる (それ以外の場合は
201 \fBENOTTY\fP を返す)。 パケットモードでは、その後に実行される \fBread\fP(2)  は、値が 0 以外の 1
202 つの制御バイトを含むパケットか、 値が 0 の 1 バイト (\(aq\e0\(aq) に疑似端末のスレーブ側で書き込まれた
203 データが続くパケットを返す。 最初のバイトが \fBTIOCPKT_DATA\fP (0) でない場合、以下のビットの 1 つ以上を OR したものである:
204
205 .nf
206 TIOCPKT_FLUSHREAD   端末の読み込みキューがフラッシュ (flush) される。
207 TIOCPKT_FLUSHWRITE  端末の書き出しキューがフラッシュされる。
208 TIOCPKT_STOP        端末への出力が停止される。
209 TIOCPKT_START       端末への出力が再開される。
210 TIOCPKT_DOSTOP      開始文字と終了文字が \fB^S\fP/\fB^Q\fP である。
211 TIOCPKT_NOSTOP      開始文字と終了文字が \fB^S\fP/\fB^Q\fP でない。
212 .fi
213
214 このモードが使われている場合、 制御状態情報の存在がマスタ側から読み込めるかは、 例外的な条件で \fBselect\fP(2)
215 を使うことにより知ることができる。
216
217 このモードは \fBrlogin\fP(1)  と \fBrlogind\fP(8)  で使われ、リモートエコーのリモートログインと ローカルでの
218 \fB^S\fP/\fB^Q\fP フロー制御のリモートログインを実装している。
219
220 BSD の ioctl である \fBTIOCSTOP\fP, \fBTIOCSTART\fP, \fBTIOCUCNTL\fP, \fBTIOCREMOTE\fP
221 は、Linux では実装されていない。
222 .SS モデム制御
223 .TP 
224 \fBTIOCMGET     int *\fP\fIargp\fP
225 モデムビット列の状態を取得する。
226 .TP 
227 \fBTIOCMSET     const int *\fP\fIargp\fP
228 モデムビット列の状態を設定する。
229 .TP 
230 \fBTIOCMBIC     const int *\fP\fIargp\fP
231 指定されたモデムビット列をクリアする。
232 .TP 
233 \fBTIOCMBIS     const int *\fP\fIargp\fP
234 指定されたモデムビット列を設定する。
235 .LP
236 これらの 4 つの ioctl で使われるビットは以下の通り:
237
238 .nf
239 TIOCM_LE        DSR (data set ready/line enable)
240 TIOCM_DTR       DTR (data terminal ready)
241 TIOCM_RTS       RTS (request to send)
242 TIOCM_ST        Secondary TXD (transmit)
243 TIOCM_SR        Secondary RXD (receive)
244 TIOCM_CTS       CTS (clear to send)
245 TIOCM_CAR       DCD (data carrier detect)
246 TIOCM_CD         TIOCM_CAR を参照。
247 TIOCM_RNG       RNG (ring)
248 TIOCM_RI         TIOCM_RNG を参照。
249 TIOCM_DSR       DSR (data set ready)
250 .fi
251 .SS 回線をローカルとしてマークする
252 .TP 
253 \fBTIOCGSOFTCAR int *\fP\fIargp\fP
254 ("ソフトウェアキャリアフラグの取得")  \fItermios\fP 構造体の c_cflag フィールドの \fBCLOCAL\fP フラグの状態を取得する。
255 .TP 
256 \fBTIOCSSOFTCAR const int *\fP\fIargp\fP
257 ("ソフトウェアキャリアフラグの設定")  *\fIargp\fP が 0 以外の場合、 \fItermios\fP 構造体の \fBCLOCAL\fP
258 フラグを設定する。 0 の場合はクリアする。
259 .LP
260 ラインの \fBCLOCAL\fP フラグがオフの場合、 ハードウェアキャリア検出 (hardware carrier detect, DCD)
261 シグナルが重要であり、 \fBO_NONBLOCK\fP フラグが指定されない限り、対応する端末の \fBopen\fP(2)  は DCD
262 が示されるまでブロックされる。 \fBCLOCAL\fP が設定されている場合、 ラインは常に DCD が示されているかのように動作する。
263 ソフトウェアキャリアフラグは、ローカルデバイスでは通常はオンになっており、 モデムのラインではオフになっている。
264 .SS "Linux 固有の ioctl"
265 \fBTIOCLINUX\fP ioctl については、 \fBconsole_ioctl\fP(4)  を参照すること。
266 .SS カーネルデバッギング
267 \fB#include <linux/tty.h>\fP
268 .TP 
269 \fBTIOCTTYGSTRUCT       struct tty_struct *\fP\fIargp\fP
270 .\"
271 .\" .SS "Serial info"
272 .\" .BR "#include <linux/serial.h>"
273 .\" .sp
274 .\" .TP
275 .\" .BI "TIOCGSERIAL    struct serial_struct *" argp
276 .\" Get serial info.
277 .\" .TP
278 .\" .BI "TIOCSSERIAL    const struct serial_struct *" argp
279 .\" Set serial info.
280 \fIfd\fP に対応する \fItty_struct\fP を取得する。
281 .SH 返り値
282 \fBioctl\fP(2)  システムコールは、成功した場合は 0 を返す。 エラーの場合は \-1 を返し、 \fIerrno\fP を適切に設定する。
283 .SH エラー
284 .TP 
285 \fBEINVAL\fP
286 不正なコマンド引き数である。
287 .TP 
288 \fBENOIOCTLCMD\fP
289 不明なコマンドである。
290 .TP 
291 \fBENOTTY\fP
292 \fIfd\fP が不適切である。
293 .TP 
294 \fBEPERM\fP
295 権限が不足している。
296 .SH 例
297 シリアルポートの DTR の状態をチェックする。
298
299 .nf
300 #include <termios.h>
301 #include <fcntl.h>
302 #include <sys/ioctl.h>
303
304 int
305 main(void)
306 {
307     int fd, serial;
308
309     fd = open("/dev/ttyS0", O_RDONLY);
310     ioctl(fd, TIOCMGET, &serial);
311     if (serial & TIOCM_DTR)
312         puts("TIOCM_DTR が設定されていない。");
313     else
314         puts("TIOCM_DTR が設定されている。");
315     close(fd);
316 }
317 .fi
318 .SH 関連項目
319 .\"
320 .\" FIONBIO                     const int *
321 .\" FIONCLEX                    void
322 .\" FIOCLEX                     void
323 .\" FIOASYNC                    const int *
324 .\" from serial.c:
325 .\" TIOCSERCONFIG               void
326 .\" TIOCSERGWILD                int *
327 .\" TIOCSERSWILD                const int *
328 .\" TIOCSERGSTRUCT              struct async_struct *
329 .\" TIOCSERGETLSR               int *
330 .\" TIOCSERGETMULTI             struct serial_multiport_struct *
331 .\" TIOCSERSETMULTI             const struct serial_multiport_struct *
332 .\" TIOCGSERIAL, TIOCSSERIAL (see above)
333 \fBioctl\fP(2), \fBtermios\fP(3), \fBconsole_ioctl\fP(4), \fBpty\fP(7)
334 .SH この文書について
335 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
336 である。プロジェクトの説明とバグ報告に関する情報は
337 http://www.kernel.org/doc/man\-pages/ に書かれている。