ノンブロッキングパイプについてはたくさんの質問がありますが、コピーアンドペースト(ほとんど修正なし)して使用できるコードの例はありません。
私はこのスレッドからアイデアと情報源を得ました: popenを使用したノンブロッキングパイプ?
しかし、それをどのように使用するのですか?while
サイクルで?変更内容を確認してください。本当にerrno == EAGAIN
&追加のヘッダーを使用する必要があり#include <cerrno>
ますか?必要に応じて、より良いバージョンを所有することを提案します。
FILE *pipe;
char buff[512];
if ( !(pipe = popen( command.c_str(), "r")) ) return false;
int d = fileno(pipe);
while ( true )
{
ssize_t r = read(d, buff, sizeof(buff));
if (r == -1 && errno == EAGAIN) // really need errno?
continue;
else if (r > 0)
ptr_output->append(buff);
else
break;
}
pclose(pipe);