如:
#include<unistd.h>
#include<stdio.h>
int main()
{
pid_t pid;
if((pid=fork())==0)
printf("a\n");
else
{ printf("a\n");
}
return 0;
}
屏幕输出:a
a
重定向输出:a
求解疑。
fork 后有了连个进程,相当于重定向了2次, 第二次覆盖了第一次的结果! 应该是这样的哈
如果是覆盖的话,即使return之前加条wiat(NULL);应该重定向后还是会只显示一行a吧,但实际上有2行。这是为什么?
估计是因为fork启动了一个新的进程的问题
http://stackoverflow.com/questions/2605130/redirecting-exec-output-to-a-buffer-or-file 试试这个看看
你应该是使用>这个重定向导致的,你使用>>重定向应该就和屏幕输出一样了。
@华鹏zjb: 我的输出和你的标准输出一样啊,你的图挂了
@jacksu@tencent: 看不到图吗?
#include<unistd.h>
#include<stdio.h>
int main()
{
pid_t pid;
printf("a\n");
if((pid=fork())==0)
printf("a\n");
else
{ printf("a\n");
}
return 0;
}
屏幕输出三行a
用>>后四行a。
@华鹏zjb: 由于缓存的缘故,输出到屏幕,没有缓存,马上输出,子进程建立的时候,已经没有数据,因此子进程没有cpy相同的数据;重定向,放到缓存,建立子进程cpy一份数据到自己的空间
@jacksu@tencent: 理解了,谢啦