TERMIOS(3)


名前

termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, tcgetpgrp, tcsetpgrp ---
端末の属性取得と設定、回線制御、ボーレート の取得と設定、端末のフォアグラウンド・プロセスのグループIDの取得と設定。

書式
       #include <termios.h>
       #include <unistd.h>

       int tcgetattr ( int fd, struct termios *termios_p );

       int tcsetattr ( int fd, int optional_actions, struct termios *termios_p );

       int tcsendbreak ( int fd, int duration );

       int tcdrain ( int fd );

       int tcflush ( int fd, int queue_selector );

       int tcflow ( int fd, int action );

       int cfmakeraw ( struct termios *termios_p );

       speed_t cfgetospeed ( struct termios *termios_p );

       int cfsetospeed ( struct termios *termios_p, speed_t speed);

       speed_t cfgetispeed ( struct termios *termios_p );

       int cfsetispeed ( struct termios *termios_p, speed_t speed);

       pid_t tcgetpgrp ( int fd );

       int tcsetpgrp ( int fd, pid_t pgrpid );
    
説明

ここでは、非同期通信ポート制御をつかさどっている、一般的な端末 インターフェースであるtermios関数群について記述している。

ここで記述されている多くの関数群は、termios構造体へのポインタで あるtermios_pを引数に取る。この構造体には以下のメンバがある。

              tcflag_t c_iflag;      /* 入力モード */
              tcflag_t c_oflag;      /* 出力モード */
              tcflag_t c_cflag;      /* 制御モード */
              tcflag_t c_lflag;      /* ローカルモード */
              cc_t c_cc[NCCS];       /* 制御文字 */
    
c_iflagフラグ定数
IGNBRK 入力時のブレーク状態を無視する
BRKINT IGNBRKが設定されていない場合、ブレーク状態にな ったらSIGINTを生成する。そうでなければ、ブレークは \0 として読み込む。
IGNPAR フレーミング・エラーとパリティ・エラーを無視する。
PARMRK IGNPARが設定されていない場合、フレーミング・エ ラーまたはパリティ・エラーになった文字の前に \377 \0 を付加する。 IGNPARもPARMRKも設定されていない場合は、フレーミング・エラーまたはパリ ティ・エラーになった文字は \0 として読み込む。
INPCK 入力パリティ・チェックを有効にする。
ISTRIP 8ビット目を落とす。
INLCR 入力時にNL(ニューライン)をCR(キャリッジ・リ ターン)に変換する。
IGNCR 入力時にキャリッジ・リターンを無視する。
ICRNL (IGNCRが設定されていなければ)入力時にキャリッ ジ・リターンをニューラインに変換する。
IUCLC 入力時に小文字を大文字にマップする。
IXON 出力時にXON/XOFFフロー制御を有効にする。
IXANY 出力を再開させるために、すべての文字を有効にする。
IXOFF 入力時にXON/XOFFフロー制御を有効にする。
IMAXBEL 入力キューがいっぱいになったらベルを鳴らす。

c_oflagフラグ定数
OPOST 実装依存の出力処理を有効にする。
OLCUC 出力時に小文字を大文字にマップする。
ONLCR 出力時に NL を CR-NL にマップする。
OCRNL 出力時に CR を NL にマップする。
ONOCR 0 桁目にはCRを出力しない。
ONLRET CRを出力しない。
OFILL 時間により遅延させるのではなく、遅延の意味の補 完文字を送る。
OFDEL 補完文字を ASCII の DEL にする。設定されていな い場合、補完文字は ASCII の NUL となる。
NLDLY ニューラインの遅延マスク。値は NL0 と NL1 である。
CRDLY キャリッジ・リターンの遅延マスク。値は CR0, CR1, CR2, または CR3 である。
TABDLY 水平タブの遅延マスク。値は TAB0, TAB1, TAB2, TAB3, または XTABS である。XTABS 値は(8桁ごとのタブ・ストップで)タ ブから空白に変換される。
BSDLY バックスぺースの遅延マスク。値は BS0 または BS1 である。
VTDLY 垂直タブの遅延マスク。値は VT0 または VT1 である。
FFDLY フォーム・フィード(改ページ)の遅延マスク。値は FF0 または FF1 である。

c_cflagフラグ定数
CSIZE 文字サイズのマスク。値は CS5, CS6, CS7, または CS8 である。
CSTOPB 設定されていればストップビットは2、そうでなけ れば1になる。
CREAD 受信文字を有効にする。
PARENB 出力時のパリティ生成と、入力時のパリティ・チェ ックを有効にする。
PARODD 入力時と出力時のパリティをodd(奇数)にする。
HUPCL 最後のプロセスがデバイスをクローズ(ハングアッ プ)した場合、モデムの制御線をローレベルにする。
CLOCAL モデムの制御線を無効にする(ローカル接続)。
CIBAUD 入力時のスピードのマスク値(未使用)。
CRTSCTS フロー制御。
c_lflagフラグ定数
ISIG INTR, QUIT, SUSP, DSUSP のいずれかの文字を受信 すると、対応するシグナルを生成する。
ICANON カノニカル(正規)モードにする。これにより EOF, EOL, EOL2, ERASE, KILL, REPRINT, STATUS, WERASE の各文字が有効となり、 行単位でバッファリングされるようになる。
XCASE ICANON も設定されている場合、端末は大文字のみの モードとなる。入力文字は、\. が前に付かない限り小文字に変換される。出 力時は、大文字は前に \ が付き、小文字は大文字に変換される。
ECHO 入力文字をエコーする。
ECHOE ICANON も設定されている場合、ERASE 文字は前に入 力された文字を消し、WERASE は前に入力された単語を消す。
ECHOK ICANON も設定されている場合、KILL は現在行を消す。
ECHONL ICANON も設定されている場合、ECHO が設定されてい なくても NL 文字をエコーする。
ECHOCTL ECHO も設定されている場合、TAB, NL, START および STOP 以外のASCII 制御シグナルは ^X としてエコーされる。X は制御シグナル よりも大きい ASCII コードの 0x10 である。たとえば、文字 0x28 (BS) は ^H としてエコーする。
ECHOPRT ICANON と ECHO も設定されている場合、文字は消さ れようとしているそのままの姿で表示される。
ECHOKE ICANON も設定されている場合、KILL は、ECHOE や ECHOPRT で指定されているように、現在行の各文字を消しているようにエコー される。
FLUSHO 出力はフラッシュされる。このフラグは DISCARD 文 字をタイプするたびにトグルされる。
NOFLSH SIGINT や SIGQUIT シグナルが生成された時は入力 キューと出力キューをフラッシュせず、 SIGSUSP シグナルを生成した時にフ ラッシュするようにする。
TOSTOP 自分が制御しているターミナルに書き込もうとして いるバックグラウンド・プロセスのプロセス・グループに SIGTTOU シグナルを送る。
PENDIN 入力キューの中のすべての文字は、次の文字が読み 込まれた時に再度表示される。(bash はこの方法で先打ちを実現している)
IEXTEN 実装依存の入力処理を有効にする。

tcgetattr() は、fd により参照されるオブジェクトに関連付けられた パラメータを取得して、それらを termios_p により参照される termios 構造 体の中に格納する。この関数はバックグラウンド・プロセスから呼び出される こともあるかもしれないが、その場合それに続いて実行されたフォアグラウン ド・プロセスにより、端末属性が変更されてしまっている可能性もありうる。

tcsetattr() は、termios_p により参照される termios 構造体からの 情報により、(基礎となるハードウェアがそれをサポートできないものでない 限り、)端末に関連付けられたパラメータを設定する。optional_actions は、 変更をいつ反映させるかを、以下のように指定する。

optional_actions
TCSANOW 変更を即時に反映させる。
TCSADRAIN fd に書き込まれたすべての出力を転送し終わった後 に、変更を反映させる。変更するパラメータが出力に影響する場合は、この機 能を使うべきである。
TCSAFLUSH fd により参照されるオブジェクトへ書き込まれたす べての出力を転送し終わり、かつすべての入力が受信された後に、変更を反映 させるが、変更が行われる前に読み込まれていないものは捨てられる。

tcsendbreak() は、端末が非同期のシリアルデータ転送を行っている 場合、連続した0値のビット列を、指定した持続時間の間連続して送出する。 指定した持続時間が0の場合、0値のビット列は 0.25 秒〜 0.5 秒間送出さ れる。持続時間が0でない場合、0値のビット列は持続時間×N 秒間送出され る。N の値は 0.25 〜 0.5 である。

端末が非同期のシリアルデータ転送を行っていない場合、tcsendbreak() は何もせずに戻る。

tcdrain() は、fd により参照されるオブジェクトへ書き込まれたすべ ての出力を転送し終わるまで待つ。

tcflush() は、queue_selector の値にしたがって、fd により参照さ れるオブジェクトへ書き込まれているがまだ送出されていないデータや、受 信が完了しているがまだ読み込まれていないデータを破棄する。

queue_selector
TCIFLUSH 受信が完了しているがまだ読み込まれていないデー タを破棄する。
TCOFLUSH 書き込まれているがまだ送出されていないデータを 破棄する。
TCIOFLUSH 書き込まれているがまだ送出されていないデータ、 および受信が完了しているがまだ読み込まれていないデータの双方を破棄する。

tcflow() は、action の値にしたがって、fd により参照されるオブジ ェクト上のデータの送受信を一時停止する。

action
TCOOFF 出力を一時停止する。
TCOON 出力を再開する。
TCIOFF 端末デバイスがデータをシステムに送信するのを停 止させるための STOP 文字を送出する。
TCION 端末デバイスがデータをシステムに送信するのを開 始させるための START 文字を送出する。

端末ファイルをオープンする際のデフォルトは、入出力ともに一時停 止していない状態である。

ボーレート関数は、termios 構造体にある入出力時のボーレートを取 得/設定するためにある。新しい値は、tcsetattr() のコールが成功するま では反映されない。

速度を B0 にするということは、モデムをハングアップさせるこ とである。 B38400 までに対応する実際のビットレートは setserial(8) で 変更される可能性がある。

入出力時のボーレートは、termios 構造体に格納される。

cfmakeraw() は、以下のように端末属性を設定する。

                   termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
                                   |INLCR|IGNCR|ICRNL|IXON);
                   termios_p->c_oflag &= ~OPOST;
                   termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
                   termios_p->c_cflag &= ~(CSIZE|PARENB);
                   termios_p->c_cflag |= CS8;
    

cfgetospeed() は、termios_p が指している、termios 構造体にある 出力時のボーレートを返す。

cfsetospeed() は、termios_p が指している、termios 構造体にある 出力時のボーレートを speed に設定する。これは以下の何れかの値でなけれ ばならない。

            B0
            B50
            B75
            B110
            B134
            B150
            B200
            B300
            B600
            B1200
            B1800
            B2400
            B4800
            B9600
            B19200
            B38400
            B57600
            B115200
            B230400
    

ボーレート値 B0 は、接続を終了させるために使われる。B0 が指定さ れると、モデムの制御線はもはやアサートされなくなる。通常は、これで回線 を切断する。CBAUDEX は POSIX.1 で定義された値を越える速度(57600 以上) を定義するためのマスクである。そのため、B57600 & CBAUDEX の値は0ではない。

cfgetispeed() は、termios 構造体に格納されている、入力ボーレー トを返す。

cfsetispeed() は、termios 構造体に格納されている入力ボーレート を speed に設定する。入力ボーレートが0に設定されると、入力ボーレート は出力ボーレートに等しくなる。

tcgetpgrp() は、フォアグラウンドのプロセスのプロセス・グループ IDを返し、エラーの場合 -1 を返す。

tcsetpgrp() は、プロセス・グループIDを pgrpid に設定する。 pgrpid は、同一のセッションにあるプロセス・グループのIDでなければなら ない。

返り値

cfgetispeed() は、termios 構造体に格納された入力ボーレートを返す。

cfgetospeed() は、termios 構造体に格納された出力ボーレートを返す。

tcgetpgrp() は、フォアグラウンド・プロセス・グループのグループ IDを返し、エラーなら -1 を返す。

その他のすべての関数は、以下の値を返す。

0成功した時。
-1失敗した時。エラー内容は errno にセットされる。
関連事項
       setserial(8)
    
翻訳者

この文書は、Linux Slackware 3.4 の man 3 termios (1995/09/02版) を堀田倫英(sim@remus.dti.ne.jp) が翻訳したものです。