• ベストアンサー

popen実行時にバッファが空の場合

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でしょうか。

nicname
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A