首页 新闻 会员 周边 捐助

linux 进程函数屏幕输出结果和重定向结果为什么会不一样?

0
悬赏园豆:80 [已解决问题] 解决于 2013-11-15 14:01

 如:

 #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

求解疑。

华鹏zjb的主页 华鹏zjb | 初学一级 | 园豆:130
提问于:2013-11-07 00:04
< >
分享
最佳答案
0

fork 后有了连个进程,相当于重定向了2次, 第二次覆盖了第一次的结果!  应该是这样的哈

收获园豆:30
Desneo | 菜鸟二级 |园豆:232 | 2013-11-07 09:31

如果是覆盖的话,即使return之前加条wiat(NULL);应该重定向后还是会只显示一行a吧,但实际上有2行。这是为什么?

华鹏zjb | 园豆:130 (初学一级) | 2013-11-15 13:37
其他回答(2)
0

估计是因为fork启动了一个新的进程的问题

http://stackoverflow.com/questions/2605130/redirecting-exec-output-to-a-buffer-or-file 试试这个看看

收获园豆:20
2012 | 园豆:21645 (高人七级) | 2013-11-07 08:46
0

你应该是使用>这个重定向导致的,你使用>>重定向应该就和屏幕输出一样了。

收获园豆:30
TheBug | 园豆:232 (菜鸟二级) | 2013-11-09 17:14

@华鹏zjb: 我的输出和你的标准输出一样啊,你的图挂了

支持(0) 反对(0) TheBug | 园豆:232 (菜鸟二级) | 2013-11-15 13:52

@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。

支持(0) 反对(0) 华鹏zjb | 园豆:130 (初学一级) | 2013-11-15 13:55

@华鹏zjb: 由于缓存的缘故,输出到屏幕,没有缓存,马上输出,子进程建立的时候,已经没有数据,因此子进程没有cpy相同的数据;重定向,放到缓存,建立子进程cpy一份数据到自己的空间

支持(1) 反对(0) TheBug | 园豆:232 (菜鸟二级) | 2013-11-15 14:11

@jacksu@tencent: 理解了,谢啦

支持(0) 反对(0) 华鹏zjb | 园豆:130 (初学一级) | 2013-11-15 19:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册