【发布时间】:2012-05-28 20:03:07
【问题描述】:
我正在尝试使用fork() 和重定向来检查在父级中完成的重定向是否也适用于子级。我写了以下简单的程序
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main ()
{
freopen( "error.txt", "w+t", stdout ); // From now on, stdout = error.txt
printf (" ERROR! WHY DONT U UNDERSTAND?\n");
if ( fork() == 0 )
{
printf(" I AM CHILD\n");
exit(0);
}
else-
{
printf (" EITHER I AM A PARENT OR SOMETHING GOT SCREWED\n");
}
return 0;
}
我得到的输出(error.txt)是
ERROR! WHY DONT U UNDERSTAND?
EITHER I AM A PARENT OR SOMETHING GOT SCREWED
ERROR! WHY DONT U UNDERSTAND?
I AM CHILD
令人惊讶的是,ERROR! WHY DONT U UNDERSTAND?打印了两次,尽管它出现在 fork() 被调用之前很久,并且应该只由父级打印一次。
有人能解释一下吗?
【问题讨论】:
-
我不确定这个,但请确保在分叉之前刷新 io-buffers。也许缓冲区被复制到孩子。
-
这将是一个很好的面试问题!
标签: c fork stdout buffering io-redirection