次のようなコードがあるとします。
int pipes[2];
pipe(pipes);
pid_t p = fork();
if(0 == p)
{
dup2(pipes[1], STDOUT_FILENO);
execv("/path/to/my/program", NULL);
...
}
else
{
//... parent process stuff
}
ご覧のとおり、パイプを作成し、分岐し、パイプを使用して子の出力を読み取ります (popen
他の目的で子プロセスの PID も必要になるため、ここでは使用できません)。
execv
質問は、上記のコードで失敗した場合、どうすればよいですか? exit() または abort() を呼び出す必要がありますか? 私の知る限り、これらの関数は開いているファイル記述子を閉じます。-ed プロセスは親のファイル記述子を継承するためfork
、親プロセスが使用するファイル記述子が使用できなくなるということですか?
UPD
問題は exec() によってロードされた実行可能ファイルが失敗することではなく、たとえば最初の引数によって参照されるファイルが見つからないか実行可能でない場合など、exec 自体に関することであることを強調したいと思います。