シリアルポートの設定が「制御線を使う」になってるとき、open()が固まってしまうことがある。 # stty -aF /dev/ttyS0 speed 9600 baud; rows 0; columns 0; line = 0; 中略 -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts 後略 ↑ここThe Linux Modem-HOWTO : �$BCN$C$F$$$k$HNI$$$*$b$7$m$$%W%m%0%i%`�(B シリアル・ポートを使ってディジタル入出力 ようするに、DCD信号を見てしまうのでopen()が返ってこない、らしい。 tcsetattr()でclocalを設定したいのにこれでは鶏と卵だ。 したがって、open()はO_NONBLOCKでおこない、そのあとにfcntl()でO_NONBLOCKを解除す