1

私はsocatを使用して、次の仮想シリアルポートを作成しています。

socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1

C ++で書かれた私のプログラムでは、ttySV1ポートを開いて、読み取りを開始します。

読み取り機能はしばらくありますが、ポートにデータを送信するまで読み取り機能がハングするという問題があります。バッファにデータがない場合にハングせずに終了するようにtaht関数を作成する方法を知っていますか?

編集:私は以下を使用してポートにデータを送信します:

echo [data] > /dev/ttySV0
4

2 に答える 2

2

実行しているオペレーティングシステムによっては、システム読み取り機能を使用することもできます。詳細は人の下にあるべきです(3)読んでください。

fnctlを使用してO_NONBLOCKを設定する必要があります。これにより、パイプ/ FIFOが現在空の場合、読み取りが失敗するはずです。Linuxのマニュアルページを確認しましたが、ほとんどのPOSIXベースのシステムで同様の動作になるはずです。

于 2010-10-23T00:19:50.650 に答える
1

1つの方法は、select()メソッドを使用して、読み取るデータがあるかどうかを確認することです。これまたはグーグルで見つかった他の何か(私は「bsdソケット選択」を検索しました)はあなたを正しい道に導くはずです。

于 2010-10-23T00:12:21.133 に答える