【发布时间】:2015-05-19 20:18:44
【问题描述】:
我在某处读到,在 Unix 中,在 fork() 成功执行后,两个进程都将在 fork() 调用之后的下一条语句开始执行。 同时,当我在 C 中运行此代码时
#include <stdio.h>
int main()
{
printf(" do ");
if(fork()!=0) printf ("ma ");
if(fork()==0) printf ("to \n");
else printf("\n")
return 0;
}
一个可能的输出是
do ma
do ma to
do
do to
"printf("做");"是 在 fork() 调用之前,那么“do”怎么会在输出中重复多次?
【问题讨论】:
-
你分叉了两次......它应该是
pid = fork(); if (pid) { ... } else { ...}来检测你是在孩子还是父母身上。并且由于您的do输出没有换行符,因此它位于输出缓冲区中,直到遇到换行符,即 AFTER 您的 fork。所以你有两个缓冲区,其中有do。 -
其他人找到了 dups - 有负载 - 标准输出缓冲的东西。
-
谢谢你的回答。我知道我要分叉两次,这是故意的,这是我老师的练习,我应该预测输出,但我仍然不明白为什么在两次分叉之前都写了好几次() 调用。
-
好的,我找到了其中一个:)
-
我认为“do”存在是因为它们缓冲在父输出内存中,该内存被复制到所有子代。
标签: c unix process output fork