最近、私にとってまったく新しい問題を発見しました。アドバイスをいただければ幸いです。Linuxでtermios関数を使用してシリアル通信を行っています。私は実際には実際のシリアルポートを使用していませんが、仮想ガジェットのシリアルドライバーを使用しています/dev/ttyGS0
。ファイル記述子は非ブロッキングとして開かれます。
私のプログラムは定期的にデータを生成し、それを/ dev/ttyGS0に送信します。もう一方の端がそれを読み取るかどうかについての情報はありません。そうでない場合、一部の内部FIFOがいっぱいになり、書き込みは「ブロックします」エラーを返します。これまでのところ、問題はありません。
問題は、そのようなファイル記述子をいっぱいのFIFOで閉じたい場合、関数ブロックを閉じることです!無期限ではありませんが、約10秒間です。
tcflush(uart->fd, TCOFLUSH)
何の効果もなく閉じる前にやろうとしました。
これは私にとって非常に奇妙な振る舞いであり、説明が見つからなかったため、閉じるとブロックされる可能性があります。これを回避する方法はありますか?または、少なくともこのタイムアウトを減らしますか?このタイムアウトはどこで探す必要がありますか?VTIME属性もこれに影響を与えません。