Pav*_*ath 6 c fork stdout buffering io-redirection
我正在试验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;
}
Run Code Online (Sandbox Code Playgroud)
error.txt我得到的输出()是
ERROR! WHY DONT U UNDERSTAND?
EITHER I AM A PARENT OR SOMETHING GOT SCREWED
ERROR! WHY DONT U UNDERSTAND?
I AM CHILD
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,即使它在调用之前出现很多,ERROR! WHY DONT U UNDERSTAND?也会打印两次,fork()并且只能由父级打印一次.
任何人都可以对此有所了解吗?
Ale*_*lin 10
由于reopen流是非交互式的,因此它是完全缓冲的并且不会刷新'\n'.在fork调用之前,缓冲区仍然包含消息,并且在fork此缓冲消息被复制之后(因为两个进程都有自己的副本stdout),然后由父节点和子节点刷新.见C标准的7.19.3部分.
您可以通过fflush之前的呼叫来避免此类行为fork.
| 归档时间: |
|
| 查看次数: |
2749 次 |
| 最近记录: |