
popenを実行したあと
fgetsなどで文字列を取り出すときにバッファが空かどうかを検出する方法はありますか?
これができないと以下のコードを実行すると空のバッファを読み込むときに止まってしまいます。
p = popen("ping6 ***","r");
fgets(buf, BUFSIZ, p);//←結果が返ってこないとここで止まる
ping6には自動的に止まるような機能がないので困っています。
どうすればfgetsで止まらないようにできるのでしょうか?
よろしくお願いします。
環境:FreeBSD 5.4

No.1ベストアンサー
- 回答日時:
fileno()でディスクリプタを取得してfctlでO_NONBLOCKを設定すればfgetsがブロックされなくなるかもしれません。
やったことないので、うまくいくかは分かりませんが...
それに、うまくブロックされなくなったとしても、ping6が標準出力にデータを書き出す前にfgetsが0バイトリードで戻ってきてしまうかもしれませんね。
そうじゃなければ、fileno()してからselectでしょうか。
ご回答ありがとうございます。
ping6にタイムアウト機能を持たせることで解決しました。(pingからソースをコピーしてきました)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WriteFile()でのデータ送信がで...
-
【CAsyncSocket::OnReceive()呼...
-
socket: recvはいつ,どれだけ...
-
シリアル通信 大きいサイズの...
-
winsockの動作について。
-
winsock recvでデータの取得方法
-
バイナリデータ受信時のデータ順
-
逆コンパイルと逆アセンブルの...
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
バックグラウンドのプロセスの...
-
マイコンからプログラムを読み...
-
sendkeysにてALT+CTRL+INSERTを...
-
スレッドにて同一メモリの書き...
-
エクセルVBA 大容量CSVファイル...
-
COBOLのS9タイプからXタイプへ...
-
libjpegで1bppBMPをjpegに変換...
-
ソケットを用いた1対多通信につ...
-
openGLで物体を半透明にして表...
-
VB.NETでMessageBoxを表示した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
winsockでソケット通信の開発を...
-
socket: recvはいつ,どれだけ...
-
「スイッチングハブのバッファ...
-
VB2005でWin32APIを用いてRS-23...
-
シリアル通信エラー
-
シリアル通信の出力バッファと...
-
バイナリデータ受信時のデータ順
-
WinsockAPIのrecvfromの受信デ...
-
SerialPortのDataReceivedイベ...
-
再現性の無いバグ
-
rs232cでの受信データ(mscomm)...
-
C#で通信処理。応答がない場合...
-
Linuxでのシリアル通信について...
-
WriteFile()でのデータ送信がで...
-
【CAsyncSocket::OnReceive()呼...
-
UDP処理のエラーについて
-
recv関数の受信結果について
-
ReadFile(GPSとの通信)Win7で...
-
VC++ HttpOpenRequest() 正し...
おすすめ情報