シリアル通信の設定は、termios構造体で行う。
メンバ変数のc_iflag, c_oflag, c_cflag, c_lflag, メンバ配列のc_ccにフラグや値がセットしてあるので、それを出力して、設定を確認する。
ただ、その前に、どんなフラグがあって、どういう値かを確認する。
termios.hがあった。
開いてみる。
bits/termios.hにありそう。
今度はbits/termios.hを開く。
定数値があった。
あれ?なんか違うなあと思ったら、
【C言語入門】16進数と8進数の変換や表示をする方法 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
8進数で定義されてるのか。
設定する前の古い情報oldと、新たに設定する情報tty、の2つの端末情報のフラグを8進数で出力する。
$ vi struct_termios.c $ gcc struct_termios.c -o struct_termios $ sudo ./struct_termios [sudo] bg1 のパスワード: old.c_iflag = 00000000 old.c_oflag = 00000000 old.c_cflag = 00014262 old.c_lflag = 00000000 old.c_cc[0] = 0 old.c_cc[1] = 0 old.c_cc[2] = 0 old.c_cc[3] = 0 old.c_cc[4] = 0 old.c_cc[5] = 0 old.c_cc[6] = 0 old.c_cc[7] = 0 old.c_cc[8] = 0 old.c_cc[9] = 0 old.c_cc[10] = 0 old.c_cc[11] = 0 old.c_cc[12] = 0 old.c_cc[13] = 0 old.c_cc[14] = 0 old.c_cc[15] = 0 old.c_cc[16] = 0 old.c_cc[17] = 0 old.c_cc[18] = 0 old.c_cc[19] = 0 old.c_cc[20] = 0 old.c_cc[21] = 0 old.c_cc[22] = 0 old.c_cc[23] = 0 old.c_cc[24] = 0 old.c_cc[25] = 0 old.c_cc[26] = 0 old.c_cc[27] = 0 old.c_cc[28] = 0 old.c_cc[29] = 0 old.c_cc[30] = 0 old.c_cc[31] = 0 tty.c_iflag = 00000000 tty.c_oflag = 00000000 tty.c_cflag = 00014262 tty.c_lflag = 00000000 tty.c_cc[0] = 0 tty.c_cc[1] = 0 tty.c_cc[2] = 0 tty.c_cc[3] = 0 tty.c_cc[4] = 0 tty.c_cc[5] = 0 tty.c_cc[6] = 0 tty.c_cc[7] = 0 tty.c_cc[8] = 0 tty.c_cc[9] = 0 tty.c_cc[10] = 0 tty.c_cc[11] = 0 tty.c_cc[12] = 0 tty.c_cc[13] = 0 tty.c_cc[14] = 0 tty.c_cc[15] = 0 tty.c_cc[16] = 0 tty.c_cc[17] = 0 tty.c_cc[18] = 0 tty.c_cc[19] = 0 tty.c_cc[20] = 0 tty.c_cc[21] = 0 tty.c_cc[22] = 0 tty.c_cc[23] = 0 tty.c_cc[24] = 0 tty.c_cc[25] = 0 tty.c_cc[26] = 0 tty.c_cc[27] = 0 tty.c_cc[28] = 0 tty.c_cc[29] = 0 tty.c_cc[30] = 0 tty.c_cc[31] = 0
c_cflagが14262というのがわかった。
ボーレートが115200、CREAD, CLOCAL, CS8, のフラグが立ってた。
あとは、受信処理はTCSETSの時と同じ。
ただ、本来は、ここでボーレートやパリティの設定を互いに違うものにして、通信できない現象を再現したかったが、ボーレートもパリティも他の値も変えても、どうにも通信出来てしまったので、予定を変更して、こんな内容に。