我编写了一个重定向子进程 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);
}