TOP Serial Programming ioctl
note:
VTIME を計るタイマーは1バイト目のデータが来て初期化される。1バイト目のデータが来ないとブロックされ続ける。
VTIME 内に1バイト目を受け取り、続くデータがバッファに残っていても read が残りすべてを読み込むとは限らない。
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 );
struct termios{ tcflag_t c_iflag /* 入力モード */ tcflag_t c_oflag /* 出力モード */ tcflag_t c_cflag /* 制御モード */ tcflag_t c_lflag /* ローカルモード */ cc_t c_cc[NCCS] /* 制御文字*/ }
IGNBRK | 入力中の BREAK 信号を無視する。 | |
BRKINT | IGNBRK が設定されている場合は、BREAK 信号は無視される。 IGNBRK が設定されていないが、BRKINT が設定されている場合は、 BREAK 信号によって入出力キューがフラッシュされ、 さらに、端末がフォアグラウンドプロセスグループの制御端末の場合は、 フォアグラウンドプロセスグループに SIGINT が送られる。 IGNBRK も BRKINT も設定されていない場合、 BREAK を NULL バイト ('\0') として読み込む。 ただし、PARMRK が設定されている場合は \377 \0 \0 のシーケンスとして 読み込む。 | |
IGNPAR | フレームエラーおよびパリティエラーを無視する。 | |
PARMRK | IGNPAR が設定されていない場合、パリティエラーあるいはフレームエラー の発生した文字の前に \377 \0 を付加する。 IGNPAR も PARMRK も 設定されていない場合、パリティエラーあるいはフレームエラーの発生した文字を \0 として読み込む。 | |
INPCK | 入力のパリティチェックを有効にする。 | |
ISTRIP | 8 ビット目を落とす。 | |
INLCR | 入力の NL (New Line: 改行文字) を CR (Carriage Return: 復帰文字) に 置き換える。 | |
IGNCR | 入力の CR を無視する。 | |
ICRNL | (IGNCR が設定されていない場合) 入力の CR を NL に置き換える。 | |
IUCLC | 入力の大文字を小文字に置き換える。 | POSIX にはない |
IXON | 出力の XON/XOFF フロー制御を有効にする。 | |
IXANY | (XSI) 任意の文字を入力すると、停止していた出力を再開する | (デフォルトでは、START 文字でのみ出力が再開される)。 |
IXOFF | 入力の XON/XOFF フロー制御を有効にする。 | |
IMAXBEL | 入力キューが一杯の時にベルを鳴らす。 | POSIX にはない Linux ではこのビットは実装されておらず、 常にセットされているかのように振舞う。 |
IUTF8 | 入力が UTF8 である; これにより cooked mode で文字削除 (character-erase) を 正しく機能させることができる。 | Linux 2.6.4 以降 POSIX にはない POSIX.1 で定義されている |
OLCUC | 出力時に小文字を大文字に変換する。 | POSIX にはない |
ONLCR | (XSI) 出力の NL を CR-NL に置き換える。 | |
OCRNL | 出力の CR を NL に置き換える。 | |
ONOCR | 0 桁目で CR を出力しない。 | |
ONLRET | CR を出力しない。 | |
OFILL | 転送時間を遅らせるのではなく、補填文字 (fill character) を送る。 | 特定の文字に対して、端末側の処理を待つために転送を一定時間 遅らせることができる。 また、 OFILL を指定すると 転送を遅らせる代わりに補填文字を送る。 |
OFDEL | 補填文字を ASCII DEL にする。 | POSIX にはない) このフラグが設定されていない場合は ASCII NUL ('\0') になる。 Linux では実装されていない |
NLDLY | NL の遅延を設定する。 | 値は NL0 (遅延なし)および NL1 である。 _BSD_SOURCE か _SVID_SOURCE か _XOPEN_SOURCE が必要 |
CRDLY | CR の遅延を設定する。 | 値は CR0 (遅延なし),CR1, CR2,CR3 である。 _BSD_SOURCE か _SVID_SOURCE か _XOPEN_SOURCE が必要 |
TABDLY | 水平タブ (horizontal tab) の遅延を設定する。 | 値は TAB0 (遅延なし), TAB1, TAB2, TAB3 (XTABS) である。 _BSD_SOURCE か _SVID_SOURCE か _XOPEN_SOURCE が必要 XTAB3 (これは XTABS と同じである) の値はタブをスペース何個に変換するかを示す (タブは 8 桁毎に止まる)。 |
BSDLY | 後退 (backspace) の遅延を設定する。 | 値は BS0 (遅延なし) あるいは BS1 である。 実装されたことはない _BSD_SOURCE か _SVID_SOURCE か _XOPEN_SOURCE が必要 |
VTDLY | 垂直タブ (vertical tab) の遅延を設定する。 値は VT0 (遅延なし) あるいは VT1 である。 | |
FFDLY | 頁送り (form feed) の遅延を設定する。 値は FF0 (遅延なし) あるいは FF1 である。 | _BSD_SOURCE か _SVID_SOURCE か _XOPEN_SOURCE が必要 |
CBAUD | ボーレートマスク (4+1 ビット)。 | POSIX にはない _BSD_SOURCE か _SVID_SOURCE が必要 |
CBAUDEX | 追加のボーレートマスク (1 ビット)。 | POSIX にはない CBAUD に含まれている。 _BSD_SOURCE か _SVID_SOURCE が必要 (POSIX では、 termios 構造体に格納されたボーレートは正確なものではなく、 ボーレートを操作するために cfgetispeed() と cfsetispeed() が提供されている。 c_cflag 内の CBAUD で選択されたビットを使うシステムもあれば、 sg_ispeed や sg_ospeed といった独立したフィールドを使うものもある。 |
CSIZE | 文字サイズを設定する。 | 値は CS5, CS6, CS7, CS8 である。 |
CSTOPB | ストップビットを 1 ではなく 2 にする。 | |
CREAD | 受信を有効にする。 | |
PARENB | 出力にパリティを付加し、入力のパリティチェックを行う。 | |
PARODD | 設定されると、入力および出力に対するパリティが奇数パリティとなる。 設定されない場合、偶数パリティが使用される。 | |
HUPCL | 最後のプロセスがデバイスをクローズした後、モデムの制御線を low にする (切断する)。 | |
CLOCAL | モデムの制御線を無視する。 | |
LOBLK | 現在のシェル層以外からの出力を抑制する。 | POSIX にはない shl (シェル層) で用いられる。 Linux では実装されていない |
CIBAUD | 入力速度のマスク。 | POSIX にはない CIBAUD ビットのための値は CBAUD ビットのための値と同じであり、 左に IBSHIFT ビットシフトしたものである。 _BSD_SOURCE か _SVID_SOURCE が必要 Linux では実装されていない |
CMSPAR | 「スティック (stick)」パリティ (マーク/スペース パリティ)を使用する。 | POSIX にはない 一部のシリアルデバイスでサポートされている PARODD が設定された場合パリティビットは常に 1 となり、 設定されない場合は常に 0 となる。 _BSD_SOURCE か _SVID_SOURCE が必要 |
CRTSCTS | RTS/CTS (ハードウェア) フロー制御を有効にする。 | POSIX にはない _BSD_SOURCE か _SVID_SOURCE が必要 |
ISIG | INTR, QUIT, SUSP, DSUSP の文字を受信した時、対応するシグナルを 発生させる。 | |
ICANON | カノニカルモードを有効にする | 行単位で処理 |
XCASE | ICANON が同時に設定された場合、端末は大文字のみが有効である。 入力された文字は \ が付いた文字を除いて小文字に変換される。 出力時は、大文字の前に \ が付き、小文字は大文字に変換される。 | POSIX にはない Linux では対応していない _BSD_SOURCE が _SVID_SOURCE か _XOPEN_SOURCE が必要 |
ECHO | 入力された文字をエコーする。 | |
ECHOE | ICANON も同時に設定された場合、ERASE 文字は前の文字を削除し、 WERASE 文字は前の単語を削除する。 | |
ECHOK | ICANON も同時に設定された場合、KILL 文字は現在の行を削除する。 | |
ECHONL | ICANON も同時に設定された場合、 ECHO が設定されていなくても NL 文字をエコーする。 | |
ECHOCTL | ECHO も同時に設定された場合、TAB, NL, START, STOP 以外の 端末特殊文字が ^X としてエコーされる。 X は特殊文字に ASCII コードで 0x40 を足した文字である。 | POSIX にはない 例えば文字 0x08 (BS) は ^H とエコーされる。 _BSD_SOURCE か _SVID_SOURCE が必要 |
ECHOPRT | ICANON および ECHO が同時に設定されている場合、 削除された文字も表示される。 | POSIX にはない _BSD_SOURCE か _SVID_SOURCE が必要 |
ECHOKE | ICANON も設定された場合、 KILL が行の各文字を消去する代わりにエコーされる。 | POSIX にはない これは ECHOE および ECHOPRT を指定することと等しい。 _BSD_SOURCE か _SVID_SOURCE が必要 |
DEFECHO | プロセスが読み込んだときにだけエコーする。 | POSIX にはない Linux では実装されていない |
FLUSHO | 出力をフラッシュする。このフラグは DISCARD 文字を入力することで切替えられる。 | POSIX にはない Linux では対応していない _BSD_SOURCE か _SVID_SOURCE が必要 |
NOFLSH | INT, QUIT, SUSP 文字に対応するシグナルを発生する際の 入力・出力キューのフラッシュを無効にする。 | |
TOSTOP | バックグラウンドプロセスのプロセスグループで制御端末へ 文字を出力しようとしているプロセスに対して SIGTTOU シグナルを送る。 | |
PENDIN | 次の文字を読み込んだ時、入力キュー中の全文字を再表示する。 | ~POSIX にはない Linux では対応していない bash(1) は入力行をこのように処理している。 _BSD_SOURCE か _SVID_SOURCE が必要 |
---|---|---|
IEXTEN | 実装依存の入力処理を有効にする。 | このフラグは、特殊文字である EOL2, LNEXT, REPRINT, WERASE や、 IUCLC フラグを有効にするために必要である。 |
VDISCARD | 未送信バッファの内容の破棄/保存を切り替える。 | IEXTEN がセットされている場合に認識し、入力には渡されない。 POSIX にはな Linux では対応していない 017, SI, Ctrl-O |
VDSUSP | 遅延中断文字 (DSUSP)。 | ユーザープログラムから文字が読み込まれた時に SIGTSTP シグナルを送る。 IEXTEN と ISIG がセットされていて、システムがジョブ制御に対応している 場合に 認識し、入力には渡されない。 POSIX にはない Linux では対応していない 031, EM, Ctrl-Y) |
VEOF | ファイル終端文字 (EOF)。 | より正確には、tty バッファの内容を行末を待たずにユーザープログラムに送る。 これが行の最初の文字だった場合、ユーザープログラムの read(2) は 0 を 返し、 ファイル終端であることを知らせる。 ICANON がセットされている場合に認識し、 入力には渡されない。 004, EOT, Ctrl-D |
VEOL | 追加の行末文字 (EOL)。 | ICANON がセットされている場合に認識する。 0, NUL |
VEOL2 | 追加の行末文字 (EOL2)。 | ICANON がセットされている場合に認識する。 POSIX にはない; 0, NUL |
VERASE | 消去文字 (ERASE)。 | 0177, DEL, rubout か 010, BS, Ctrl-H か # これにより、直前の未消去文字を消去する。 しかし、EOF や行頭を超えては消去しない。 ICANON がセットされている場合に認識し、入力には渡されない。 |
VINTR | 割り込み文字 (INTR)。 | 003, ETX, Ctrl-C か 0177, DEL, rubout SIGINT シグナルを送る。 ISIG がセットされている場合に認識し、入力には渡されない。 |
VKILL | 完全消去文字 (KILL)。 | 025, NAK, Ctrl-U か Ctrl-X か @ 直前の EOF か行頭以降の全ての入力を消去する。 ICANON がセットされている場合に認識し、入力には渡されない。 |
VLNEXT | リテラル (LNEXT)。 | POSIX にはない 026, SYN Ctrl-V 次の入力文字をエスケープし、特別な意味があっても解釈しない。 IEXTEN がセットされている場合に認識し、入力には渡されない。 |
VMIN | 非カノニカル読み込み時の最小文字数 (MIN)。(see) | |
VQUIT | 終了文字 (QUIT)。 | 034, FS, Ctrl-\ SIGQUIT シグナルを送る。 ISIG がセットされている場合に認識し、入力には渡されない。 |
VREPRINT | まだ読み込んでいない文字列を再表示する (REPRINT)。 | POSIX にはない 022, DC2, Ctrl-R ICANON と IEXTEN がセットされている場合に認識し、入力には渡されない |
VSTART | 開始文字 (START)。 | 021, DC1, Ctrl-Q 停止文字で停止した出力を再開する。 IXON がセットされている場合に認識し、入力には渡されない。 |
VSTATUS | 状態文字 (STATUS)。 | (POSIX にはない Linux では対応していない 状態要求: 024, DC4, Ctrl-T 端末での状態情報を表示する。 表示される情報には、フォアグラウンドプロセスの状態やそのプロセスが消費した CPU 時間の総計が含まれる。 また、フォアグラウンドプロセスグループにシグナル SIGINFO を送信する Linux ではサポートされていない |
VSTOP | 停止文字 (STOP)。 | 023, DC3, Ctrl-S 開始文字が入力されるまで出力を停止する。 IXON が設定されている場合に認識し、入力には渡されない。 |
VSUSP | 中断文字 (SUSP)。 | 032, SUB, Ctrl-Z SIGTSTP シグナルを送る。 ISIG がセットされている場合に認識し、入力には渡されない。 |
VSWTCH | スイッチ文字 (SWTCH)。 | POSIX にはない Linux では対応していない 0, NUL System V で (シェルのジョブ制御の前にあった) shell layers での シェルの切り替えに用いられる。 |
VTIME | 非カノニカル読み込み時のタイムアウト時間 (1/10 秒単位) (TIME)。(see) | |
VWERASE | 単語消去 (WERASE)。 | POSIX にはない 027, ETB, Ctrl-W ICANON と IEXTEN がセットされている場合に認識し、入力には渡されない。 |
VMIN | VTIM | データ(>=VMIN)があれば | データ(<VMIN)があれば | データがなければ | VTIME(<>0) 以上経過 |
=0 | =0 | 読み込み戻る | そのまま戻る。 | N/A | |
>0 | =0 | 読み込み戻る | データをVMIN以上受けるまでブロックする。 | N/A | |
>0 | >0 | 読み込み戻る | データをVMIN以上受ける,または VTIME 以上で戻る | 戻る(note) | |
=0 | >0 | 読み込み戻る | VTIME だけ待ち、その間ブロック | 戻る(note) |
note:
VTIME を計るタイマーは1バイト目のデータが来て初期化される。1バイト目のデータが来ないとブロックされ続ける。
VTIME 内に1バイト目を受け取り、続くデータがバッファに残っていても read が残りすべてを読み込むとは限らない。
最新コメント