termios を使用して、Linux でネイティブ シリアル ポートを開いています。
ポートはブロッキング モードで開かれ、設定はVMIN = 10およびVTIME = 5です。これは、タイムアウトに達した場合、ブロッキング読み取り機能が 0.5 秒後に返されることを意味するはずだと思いました。
私はこれをここで見つけましたが:
read() は、VMIN 文字が呼び出し側のバッファーに転送されたとき、または VTIME の 10 分の 1 が文字間で期限切れになったときに満たされます。このタイマーは最初の文字が到着するまで開始されないため、シリアル回線がアイドル状態の場合、この呼び出しは無期限にブロックされる可能性があります。これは最も一般的な操作モードであり、VTIME は全体的なタイムアウトではなく、キャラクタ間のタイムアウトと見なされます。彼の呼び出しは、読み取ったゼロバイトを決して返すべきではありません。
だから私の質問は今、回線がアイドル状態の場合にこのタイムアウトでコールを返す方法ですか?
ありがとう!