質問: 0; i < len; i++) { printf("%s", rBuf[i]); } printf("\n"); } close(fd); // デバイスのクローズ return 0; } ``` ご教授、賜れましたら幸いです。
回答: 少なくとも明らかにひとつコードに問題があって、 ``` struct termios tio; // シリアル通信設定 fd = open(SERIAL_PORT, O_RDWR); // デバイスをオープンする tio.c_cflag += CREAD; // 受信有効 tio.c_cflag += CLOCAL; // ローカルライン(モデム制御なし) ... ``` とある部分で、`struct termios tio;`と宣言されただけで、中はゴミのまま、メンバー変数に `CREAD`等をセットしています。これだとゴミのビットパターンがセットされたままになり、不適切な設定がされてしまう可能性が高いです。`memset`なり宣言時の初期化なりで、あらかじめ0クリアしてください。 また、`write()`などのシステムコール実行時は返り値のチェックと、エラーであれば`errno`をチェックしてください。 もし書き込みでBUSY状態のようなことになっていれば、`select`で書き込み可となるまで待機した方が良いかと思われます。 あと気になったこととしては、`+=`でビットパターンをセットしている部分で、ビットパターンを扱う上では良い書き方ではありません。セット(ON)するときは`|= 値` 、OFFにするときは`&= ~値`としましょう。(今回の問題のケースに直接関係は無いと思いますが)