Provided by: manpages-ja_0.5.0.0.20131015+dfsg-2_all bug

名前

       tty_ioctl - 端末とシリアルラインの ioctl (入出力制御)

書式

       #include <termios.h>

       int ioctl(int fd, int cmd, ...);

説明

       端末とシリアルポートについての ioctl(2)  コールは、多くのコマンド引き数を受け付ける。 多く
       がいろいろな型の 3 番目の引き数を必要とする。 ここでは argp または arg と呼ぶ。

       ioctl を使用すると移植性のないプログラムになる。 可能な場合は、 termios(3)  に記述されてい
       る POSIX インタフェースを使うこと。

   端末属性の取得と設定
       TCGETS    struct termios *argp
              tcgetattr(fd, argp) と同じ。
              現在のシリアルポートの設定を取得する。

       TCSETS    const struct termios *argp
              tcsetattr(fd, TCSANOW, argp) と同じ。
              現在のシリアルポートの設定を変更する。

       TCSETSW   const struct termios *argp
              tcsetattr(fd, TCSADRAIN, argp) と同じ。
              排出  (drain) を行うための出力バッファの使用を許可し、 現在のシリアルポートの設定を
              変更する。

       TCSETSF   const struct termios *argp
              tcsetattr(fd, TCSAFLUSH, argp) と同じ。
              排出  (drain)  を行うための出力バッファの使用を許可し、  処理していない入力を破棄し
              て、 現在のシリアルポートの設定を変更する。

       以下の  4  つの  ioctl  は  TCGETS,  TCSETS, TCSETSW, TCSETSF と似ている。 ただし、 struct
       termios * の代わりに struct termio * を取る。

              TCGETA    struct termio *argp

              TCSETA    const struct termio *argp

              TCSETAW   const struct termio *argp

              TCSETAF   const struct termio *argp

   termios 構造体のロック
       端末の termios 構造体はロックすることが可能である。  このロック自体は  termios  構造体であ
       り、 0 でないビットまたはフィールドはロックされた値を示す。

       TIOCGLCKTRMIOS struct termios *argp
              端末の termios 構造体のロック状態を取得する。

       TIOCSLCKTRMIOS const struct termios *argp
              端末の    termios    構造体のロック状態を設定する。   root   のみ   (より正確には、
              CAP_SYS_ADMIN ケーパビリティを持つプロセス) がこれを実行できる。

   ウィンドウサイズの取得と設定
       ウィンドウサイズはカーネル内に保持されるが、 カーネルによって使用されない  (仮想コンソール
       の場合は例外であり、新しいフォントを読み込んだ場合など、    仮想端末のサイズが変更された場
       合、カーネルはウィンドウサイズを更新する)。

       以下の定数と構造体は <sys/ioctl.h> で定義されている。

       TIOCGWINSZ     struct winsize *argp
              ウィンドウサイズを取得する。

       TIOCSWINSZ     const struct winsize *argp
              ウィンドウサイズを設定する。

       これらの ioctl で使用される構造体は、以下のように定義される。

           struct winsize {
               unsigned short ws_row;
               unsigned short ws_col;
               unsigned short ws_xpixel;   /* 未使用 */
               unsigned short ws_ypixel;   /* 未使用 */
           };

       ウィンドウサイズが変更された場合、 フォアグラウンドプロセスグループに SIGWINCH  シグナルが
       送られる。

   break の送信
       TCSBRK    int arg
              tcsendbreak(fd, arg) と同じ。
              端末が非同期シリアルデータ転送を使用しており、  arg が 0 の場合、0.25 から 0.5 秒の
              間に break (0 のビット列のストリーム) が送信される。 端末が非同期シリアルデータ転送
              を使用している場合、 break が送信されるか、この関数は何もせずに返る。 arg が 0 以外
              の場合、何が起こるか分からない。

              (SVr4, UnixWare, Solaris, Linux は、 tcsendbreak(fd,arg)arg が  0  以外の場合、
              tcdrain(fd)  のように扱う。 SunOS は arg を倍数として扱い、ビットのストリームを arg
              回送信する。 arg が 0 の場合も同じ。 DG/UX と AIX は、(0 以外の場合)  arg  をミリ秒
              単位の時間間隔として扱う。 HP-UX は arg を無視する。)

       TCSBRKP   int arg
              いわゆる「POSIX 版」の TCSBRK である。 これは 0 以外の arg を 1/10 秒単位の時間間隔
              として扱う。 またドライバが break をサポートしていない場合は、何もしない。

       TIOCSBRK  void
              break をオンにする。 つまり 0 のビット列の送信を開始する。

       TIOCCBRK  void
              break をオフにする。 つまり 0 のビット列の送信を停止する。

   ソフトウェアフロー制御
       TCXONC    int arg
              tcflow(fd, arg) と同じ。
              tcflow(3)  の引き数 TCOOFF, TCOON, TCIOFF, TCION を参照すること。

   バッファのカウントと書き出し (flush)
       FIONREAD  int *argp
              入力バッファにあるバイト数を取得する。

       TIOCINQ   int *argp
              FIONREAD と同じ。

       TIOCOUTQ  int *argp
              出力バッファにあるバイト数を取得する。

       TCFLSH    int arg
              tcflush(fd, arg) と同じ。
              tcflush(3)  の引き数 TCIFLUSH, TCOFLUSH, TCIOFLUSH を参照すること。

   入力の偽装
       TIOCSTI   const char *argp
              指定されたバイトを入力キューに挿入する。

   コンソール出力のリダイレクト
       TIOCCONS  void
              /dev/console または /dev/tty0 に送られる出力を、指定された端末リダイレクトする。 指
              定された端末が疑似端末 (pseudoterminal) のマスタの場合、 出力はスレーブに送られる。
              バージョン 2.6.10 より前の Linux では、出力がまだリダイレクトされて  いなければ、誰
              でもリダイレクトを行うことができる。      バージョン      2.6.10     以降では、root
              (CAP_SYS_ADMIN ケーパビリティを持つプロセス) だけがリダイレクトを行うことができる。
              出力がすでにリダイレクトされている場合は   EBUSY   が返されるが、  /dev/console/dev/tty0 を指している fd に対してこの ioctl を使用することで、リダイレクトを止める
              ことができる。

   端末の制御
       TIOCSCTTY int arg
              指定された端末を呼び出し元のプロセスの制御端末にする。   呼び出し元のプロセスはセッ
              ションリーダでなければならず、 かつ既に制御端末を持っていてはならない。  この端末が
              既に他のセッショングループの制御端末である場合、  ioctl は EPERM で失敗する。ただし
              呼び出したユーザが root  で  (より正確には  CAP_SYS_ADMIN  ケーパビリティを持ってい
              て)、かつ  arg が 1 である場合を除く。 この場合、端末は盗まれ (stolen)、 この端末を
              制御端末としていた全てのプロセスは端末を失う。

       TIOCNOTTY void
              指定された端末が呼び出し元のプロセスの制御端末である場合、 この制御端末を放棄する。
              プロセスがセッションリーダの場合、   フォアグラウンドプロセスグループに  SIGHUPSIGCONT を送り、カレントセッションの全てのプロセスは制御端末を失う。

   グループ ID とセッション ID の処理
       TIOCGPGRP pid_t *argp
              成功した場合、 *argp = tcgetpgrp(fd) と同じ。
              この端末上のフォアグラウンドプロセスのプロセスグループ ID を取得する。

       TIOCSPGRP const pid_t *argp
              tcsetpgrp(fd, *argp) と同じ。
              この端末のフォアグラウンドプロセスのグループ ID を設定する。

       TIOCGSID  pid_t *argp
              指定された端末のセッション ID を取得する。 端末がマスタ疑似端末または制御端末でない
              場合は、 ENOTTY で失敗する。 奇妙だ。

   排他モード
       TIOCEXCL  void
              端末を排他モードにする。  端末に対して、これ以降の  open(2)  操作を禁止する。 (root
              以外の場合、つまり CAP_SYS_ADMIN ケーパビリティを持たないプロセスの場合、これ以降の
              open(2)  は EBUSY で失敗する。)

       TIOCNXCL  void
              排他モードを無効にする。

   ライン制御 (line discipline)
       TIOCGETD  int *argp
              端末のライン制御の情報を取得する。

       TIOCSETD  const int *argp
              端末のライン制御の情報を設定する。

   疑似端末の ioctl
       TIOCPKT   const int *argp
              パケットモードを有効  (*argp が 0 以外の場合) または無効にする。 疑似端末のマスタ側
              にのみ適用できる (それ以外の場合は ENOTTY を返す)。  パケットモードでは、その後に実
              行される  read(2)  は、値が 0 以外の 1 つの制御バイトを含むパケットか、 値が 0 の 1
              バイト ('\0') に疑似端末のスレーブ側で書き込まれた データが続くパケットを返す。  最
              初のバイトが TIOCPKT_DATA (0) でない場合、以下のビットの 1 つ以上を OR したものであ
              る:

              TIOCPKT_FLUSHREAD   端末の読み込みキューがフラッシュ (flush) される。
              TIOCPKT_FLUSHWRITE  端末の書き出しキューがフラッシュされる。
              TIOCPKT_STOP        端末への出力が停止される。
              TIOCPKT_START       端末への出力が再開される。
              TIOCPKT_DOSTOP      開始文字と終了文字が ^S/^Q である。
              TIOCPKT_NOSTOP      開始文字と終了文字が ^S/^Q でない。

              このモードが使われている場合、 制御状態情報の存在がマスタ側から読み込めるかは、  例
              外的な条件で select(2) を使うことにより知ることができる。

              このモードは rlogin(1)  と rlogind(8)  で使われ、リモートエコーのリモートログインと
              ローカルでの ^S/^Q フロー制御のリモートログインを実装している。

              BSD の ioctl である TIOCSTOP, TIOCSTART, TIOCUCNTL, TIOCREMOTE は、Linux では実装さ
              れていない。

   モデム制御
       TIOCMGET  int *argp
              モデムビット列の状態を取得する。

       TIOCMSET  const int *argp
              モデムビット列の状態を設定する。

       TIOCMBIC  const int *argp
              指定されたモデムビット列をクリアする。

       TIOCMBIS  const int *argp
              指定されたモデムビット列を設定する。

       これらの 4 つの ioctl で使われるビットは以下の通り:

       TIOCM_LE        DSR (data set ready/line enable)
       TIOCM_DTR       DTR (data terminal ready)
       TIOCM_RTS       RTS (request to send)
       TIOCM_ST        Secondary TXD (transmit)
       TIOCM_SR        Secondary RXD (receive)
       TIOCM_CTS       CTS (clear to send)
       TIOCM_CAR       DCD (data carrier detect)
       TIOCM_CD         TIOCM_CAR を参照。
       TIOCM_RNG       RNG (ring)
       TIOCM_RI         TIOCM_RNG を参照。
       TIOCM_DSR       DSR (data set ready)

   回線をローカルとしてマークする
       TIOCGSOFTCAR   int *argp
              ("ソフトウェアキャリアフラグの取得")   termios 構造体の c_cflag フィールドの CLOCAL
              フラグの状態を取得する。

       TIOCSSOFTCAR   const int *argp
              ("ソフトウェアキャリアフラグの設定")  *argp  が  0  以外の場合、  termios  構造体の
              CLOCAL フラグを設定する。 0 の場合はクリアする。

       ラインの  CLOCAL  フラグがオフの場合、  ハードウェアキャリア検出 (hardware carrier detect,
       DCD) シグナルが重要であり、  O_NONBLOCK  フラグが指定されない限り、対応する端末の  open(2)
       は  DCD が示されるまでブロックされる。 CLOCAL が設定されている場合、 ラインは常に DCD が示
       されているかのように動作する。  ソフトウェアキャリアフラグは、ローカルデバイスでは通常はオ
       ンになっており、 モデムのラインではオフになっている。

   Linux 固有の ioctl
       TIOCLINUX ioctl については、 console_ioctl(4)  を参照すること。

   カーネルデバッギング
       #include <linux/tty.h>

       TIOCTTYGSTRUCT struct tty_struct *argp
              fd に対応する tty_struct を取得する。

返り値

       ioctl(2)   システムコールは、成功した場合は 0 を返す。 エラーの場合は -1 を返し、 errno を
       適切に設定する。

エラー

       EINVAL 不正なコマンド引き数である。

       ENOIOCTLCMD
              不明なコマンドである。

       ENOTTY fd が不適切である。

       EPERM  権限が不足している。

       シリアルポートの DTR の状態をチェックする。

       #include <termios.h>
       #include <fcntl.h>
       #include <sys/ioctl.h>

       int
       main(void)
       {
           int fd, serial;

           fd = open("/dev/ttyS0", O_RDONLY);
           ioctl(fd, TIOCMGET, &serial);
           if (serial & TIOCM_DTR)
               puts("TIOCM_DTR が設定されていない。");
           else
               puts("TIOCM_DTR が設定されている。");
           close(fd);
       }

関連項目

       ioctl(2), termios(3), console_ioctl(4), pty(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。