【发布时间】:2020-09-09 13:51:57
【问题描述】:
我正在使用freopen() 将stdout 重定向到一个进程上,只要它只是一个进程,一切都很好。
但是,如果我这样做:
freopen("stdout.txt", "a+", stdout);
printf("Initial line.\n");
int i=0;
while(i<1000)
{
if(fork())
wait(NULL);
else
printf("Line %d.\n", i);
i++;
}
第一个打印的行会一遍又一遍地重新打印在文件上。我应该做些什么来避免这种情况发生?
【问题讨论】:
-
您真的要创建数千个进程吗?想想
fork的位置以及子进程每次迭代中发生的情况。 -
The first printed lines are re-printed on the file over and over这是什么意思?它是如何“重印”的?可以举个例子吗? -
@Someprogrammerdude 是的
-
@KamilCuk
fork()的子代也包含其他所有内容,例如stdout,因为子代大多是父代的 1:1 副本。我认为你混淆了fork()和exec() -
此代码将创建 2**1000-1 个孩子,您确定要这样做吗?也许您在孩子身上忘记了
exit()?
标签: c fork stdout child-process freopen