TOP Serial Programming ioctl




termios

include

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

functions

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 );

structure

struct termios{
   tcflag_t c_iflag       /* 入力モード */ 
   tcflag_t c_oflag       /* 出力モード */ 
   tcflag_t c_cflag       /* 制御モード */ 
   tcflag_t c_lflag       /* ローカルモード */ 
   cc_t c_cc[NCCS]        /* 制御文字*/ 
}

flags

c_iflag
IGNBRK入力中の BREAK 信号を無視する。
BRKINTIGNBRK が設定されている場合は、BREAK 信号は無視される。
IGNBRK が設定されていないが、BRKINT が設定されている場合は、 BREAK 信号によって入出力キューがフラッシュされ、 さらに、端末がフォアグラウンドプロセスグループの制御端末の場合は、 フォアグラウンドプロセスグループに SIGINT が送られる。
IGNBRK も BRKINT も設定されていない場合、 BREAK を NULL バイト ('\0') として読み込む。
ただし、PARMRK が設定されている場合は \377 \0 \0 のシーケンスとして 読み込む。
IGNPARフレームエラーおよびパリティエラーを無視する。
PARMRKIGNPAR が設定されていない場合、パリティエラーあるいはフレームエラー の発生した文字の前に \377 \0 を付加する。
IGNPAR も PARMRK も 設定されていない場合、パリティエラーあるいはフレームエラーの発生した文字を \0 として読み込む。
INPCK入力のパリティチェックを有効にする。
ISTRIP8 ビット目を落とす。
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 で定義されている
c_oflag POSIX.1
OPOST実装に依存した出力処理を有効にする。
c_oflag POSIX.1-2001 で定義されているもの
OLCUC出力時に小文字を大文字に変換する。POSIX にはない
ONLCR(XSI) 出力の NL を CR-NL に置き換える。
OCRNL出力の CR を NL に置き換える。
ONOCR0 桁目で CR を出力しない。
ONLRETCR を出力しない。
OFILL転送時間を遅らせるのではなく、補填文字 (fill character) を送る。特定の文字に対して、端末側の処理を待つために転送を一定時間 遅らせることができる。
また、 OFILL を指定すると 転送を遅らせる代わりに補填文字を送る。
OFDEL補填文字を ASCII DEL にする。POSIX にはない)
このフラグが設定されていない場合は ASCII NUL ('\0') になる。
Linux では実装されていない
NLDLYNL の遅延を設定する。値は NL0 (遅延なし)および NL1 である。
_BSD_SOURCE か _SVID_SOURCE か _XOPEN_SOURCE が必要
CRDLYCR の遅延を設定する。値は 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 が必要
c_cflag
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 が必要
CRTSCTSRTS/CTS (ハードウェア) フロー制御を有効にする。POSIX にはない
_BSD_SOURCE か _SVID_SOURCE が必要
c_lflag
ISIGINTR, QUIT, SUSP, DSUSP の文字を受信した時、対応するシグナルを 発生させる。
ICANONカノニカルモードを有効にする行単位で処理
XCASEICANON が同時に設定された場合、端末は大文字のみが有効である。 入力された文字は \ が付いた文字を除いて小文字に変換される。 出力時は、大文字の前に \ が付き、小文字は大文字に変換される。POSIX にはない
Linux では対応していない
_BSD_SOURCE が _SVID_SOURCE か _XOPEN_SOURCE が必要
ECHO入力された文字をエコーする。
ECHOEICANON も同時に設定された場合、ERASE 文字は前の文字を削除し、 WERASE 文字は前の単語を削除する。
ECHOKICANON も同時に設定された場合、KILL 文字は現在の行を削除する。
ECHONLICANON も同時に設定された場合、 ECHO が設定されていなくても NL 文字をエコーする。
ECHOCTLECHO も同時に設定された場合、TAB, NL, START, STOP 以外の 端末特殊文字が ^X としてエコーされる。 X は特殊文字に ASCII コードで 0x40 を足した文字である。POSIX にはない
例えば文字 0x08 (BS) は ^H とエコーされる。
_BSD_SOURCE か _SVID_SOURCE が必要
ECHOPRTICANON および ECHO が同時に設定されている場合、 削除された文字も表示される。POSIX にはない
_BSD_SOURCE か _SVID_SOURCE が必要
ECHOKEICANON も設定された場合、 KILL が行の各文字を消去する代わりにエコーされる。POSIX にはない
これは ECHOE および ECHOPRT を指定することと等しい。
_BSD_SOURCE か _SVID_SOURCE が必要
DEFECHOプロセスが読み込んだときにだけエコーする。POSIX にはない
Linux では実装されていない
FLUSHO出力をフラッシュする。このフラグは DISCARD 文字を入力することで切替えられる。POSIX にはない
Linux では対応していない
_BSD_SOURCE か _SVID_SOURCE が必要
NOFLSHINT, QUIT, SUSP 文字に対応するシグナルを発生する際の 入力・出力キューのフラッシュを無効にする。
TOSTOPバックグラウンドプロセスのプロセスグループで制御端末へ 文字を出力しようとしているプロセスに対して SIGTTOU シグナルを送る。
PENDIN次の文字を読み込んだ時、入力キュー中の全文字を再表示する。~POSIX にはない
Linux では対応していない
bash(1) は入力行をこのように処理している。
_BSD_SOURCE か _SVID_SOURCE が必要
IEXTEN実装依存の入力処理を有効にする。このフラグは、特殊文字である EOL2, LNEXT, REPRINT, WERASE や、 IUCLC フラグを有効にするために必要である。
c_cc
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
VMINVTIMデータ(>=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 が残りすべてを読み込むとは限らない。


iotcl

man

cygwin

Example Serial I/O Code

use /dev/com1 instead of /dev/ttyS0

Ref

管理人/副管理人のみ編集できます