LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 689|回复: 7

父子进程的输出冲突问题

[复制链接]
发表于 2003-10-4 18:17:31 | 显示全部楼层 |阅读模式
我用fork建立一个子进程

启动它以后,父进程输出缓冲区的内容,它也打印出来了

父进程也跟着打印原来的内容

结果,一句话打印了两次,怎么解决这样的问题

请兄弟们指点一下!谢谢!
发表于 2003-10-4 20:07:57 | 显示全部楼层
很大的程序嗎?
发表于 2003-10-4 20:11:42 | 显示全部楼层
应该是没有理解fork机制

建议对这理解得深一点

提示"
还有就是打印时不只是父进程使用当前屏幕输出
子进程也使用
 楼主| 发表于 2003-10-4 20:31:12 | 显示全部楼层
我想,不是那个原因

原来的主程序是父进程,其中建立一个子进程,去执行另一个程序
用的是execle 调用的

那个子进程没有任何输出,我想,是输出缓冲区的问题

请兄弟们指点!

:help
发表于 2003-10-4 21:16:26 | 显示全部楼层
代码
 楼主| 发表于 2003-10-5 14:56:59 | 显示全部楼层
我从图书馆查到了

父进程创建子进程以后,输出缓冲区里的内容也一起复制给了子进程

于是出现了,一句话打印了两次的结果.

解决的方法,就是在创建子进程之前,调用fflush(stdout)

来刷新标准输出的缓冲区,我试了,好使了

还是感谢楼上的兄弟们的指点,你们很负责!:thank
发表于 2003-10-20 17:59:45 | 显示全部楼层
楼上的能不能说详细点?
缓冲区是位于进程的数据区吗?
 楼主| 发表于 2003-10-20 18:53:33 | 显示全部楼层
就像  printf("this is a string!\n"); 这样的输出语句,父进程输出了

如果不清空stdout,子进程就会重新输出一遍

如果父子进程都使用 stdout 的话,就会看到一条输出语句被显示了两次

特别是那些临近进入子进程的输出代码,常常会出现这样的现象
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表