子プロセスの IO をリダイレクトするプログラムを作成しました。私が抱えている問題は、新しい stdout と stderr がファイルに直接書き込まれておらず、代わりにメモリにバッファリングされていることです。setvbuf を使用してこれを修正しようとしましたが、うまくいきませんでした。
関数が返されてもエラーは発生しません。
以前の実装でバッファリングを削除していたので、これはかなりイライラしますが、どういうわけかファイルを失いました。いずれにせよ、setvbuf で問題が解決しない理由がわかりません。
if (!freopen(DBGD_CHILD_STDOUT, "w", stdout)){
perror ("Couldn't open new child-stdout");
exit (-1);
}
if (!freopen(DBGD_CHILD_STDERR, "w", stderr)){
perror ("Couldn't open new parent-stderr");
exit (-1);
}
if (setvbuf (stdout, 0, _IONBF, 0)){
perror ("Couldn't change buffering mode of stdout");
exit (-1);
}
if (setvbuf (stderr, 0, _IONBF, 0)){
perror ("Couldn't change buffering mode of stderr");
exit (-1);
}
if (execv (ProcessArgs[0], &ProcessArgs[1]) < 0){
perror ("Couldn't execute process");
exit (-1);
}