プログラムで結果を読み取っているbashスクリプトがあります。Ptr
単純なpopen()
ラッパーです。
bool getResult(const char* path){
Ptr f(path);
char buf[1024];
while (fgets(buf, sizeof(buf), f) == 0) {
if(errno == EINTR)
continue;
log.error("Error (%d) : %s",errno,path);
return false;
}
...
return true;
}
これは正常に機能しますが、Ptr f(path)
例外安全ではないため、次のように置き換えます。
Ptr f; // empty constructor, does nothing
char buf[1024];
try{
Ptr f(path);
}catch(Exception& e){
vlog.error("Could not open file at %s",path);
return false;
}
実行すると(そしてファイルが存在すると)、次のエラーが発生します。
/etc/my_script: line 165: echo: write error: Broken pipe
スクリプトのその行は次のとおりです。
echo $result
何が起こっている?