dポイントプレゼントキャンペーン実施中!

popenを実行したあと
fgetsなどで文字列を取り出すときにバッファが空かどうかを検出する方法はありますか?

これができないと以下のコードを実行すると空のバッファを読み込むときに止まってしまいます。

p = popen("ping6 ***","r");
fgets(buf, BUFSIZ, p);//←結果が返ってこないとここで止まる

ping6には自動的に止まるような機能がないので困っています。

どうすればfgetsで止まらないようにできるのでしょうか?

よろしくお願いします。

環境:FreeBSD 5.4

A 回答 (1件)

fileno()でディスクリプタを取得してfctlでO_NONBLOCKを設定すればfgetsがブロックされなくなるかもしれません。


やったことないので、うまくいくかは分かりませんが...
それに、うまくブロックされなくなったとしても、ping6が標準出力にデータを書き出す前にfgetsが0バイトリードで戻ってきてしまうかもしれませんね。

そうじゃなければ、fileno()してからselectでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ping6にタイムアウト機能を持たせることで解決しました。(pingからソースをコピーしてきました)

お礼日時:2005/12/23 16:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!