どのようにハングアップしないようにread関数を作るには?
-
25-09-2019 - |
質問
私は、仮想シリアルポートを作成するために、socatに関するを使用しています:
socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1
C ++で書かれた私のプログラムでは、私はttySV1ポートを開いて読み始めるます。
read関数は、しばらくの間ですが、私はポートにデータを送信するまでの問題は、読み取り機能がハングしていることです。あなたは、バッファにデータがない場合taht機能がハングアップし、ちょうど終了しないようにする方法を知っていますか?
編集:私は使用してポートにデータを送信ます:
echo [data] > /dev/ttySV0
解決
また、あなたが実行しているオペレーティングシステムに応じて、システムの読み取り機能を使用することができます。 詳細は読んで(3)男性の下にある必要があります。
あなたはfnctlを使用して設定さO_NONBLOCKする必要があります。これは、パイプ/ FIFOが現在空である場合、あなたの読み取りが失敗する原因とすべきです。私は、Linuxのmanページをチェックしますが、そのほとんどのPOSIXベースのシステムで同様の挙動である必要があります。
他のヒント
一つの方法は、読み込むべきデータがあるかどうかを確認するためにselect()メソッドを使用することです。 Googleで見つけたこののか、何か他のものを(私は「BSD検索しましたソケットは、右のパスへあなたを導く必要があります)」を選択します。
所属していません StackOverflow