linux fork "\n"刷新缓冲区问题

参考:http://www.cnblogs.com/guoqiaojin/archive/2012/08/24/2653609.html 
 
asic (阿塞克)Mon Jul 16 12:48:46 2012)
提到:

int main() {
printf("hello ");
fork();
printf("world\n");
}

执行结果是打印了两行 hello world
和我之前所理解的不一样,我理解的是父进程执行到fork()函数才生成子进程,这样的话
应该是打印一个hello和两个world 
求版内大神科普下,拜谢!

OP07 (【EE07】打雷『齊魯』)Mon Jul 16 13:44:27 2012) 提到: 这个问题出在printf 他是有数据缓冲区的,不加\n数据不刷新 fork()创建子进程时, 子进程复制了父进程的数据段和堆栈段 包括printf的数据缓冲区也被复制 再执行后面的printf打印刷新当然 就是两遍hello world了 要是改成printf("hello \n"); 就一遍hello 两遍world了 asic (阿塞克)Mon Jul 16 14:40:51 2012) 提到: 豁然开朗,多谢大神! asic (阿塞克)Mon Jul 16 14:53:33 2012) 提到: 试了一下,果然是这样的 另外把程序改成下面这样,打印的两句果真都是父进程的PID int main() { printf("hello:pid=%d",getpid()); fork(); printf("world\n"); } chuan92 (数星河)Mon Jul 16 15:39:58 2012) 提到: 学习了,以前只知道fflush(stdout),原来\n也可以。 oinil (Raison d'être)Mon Jul 16 18:03:59 2012) 提到: 顶! 学习了 bsidb (淡蓝天际的星光)Mon Jul 16 19:29:56 2012) 提到: 学习之~~原来理论和实际还是有距离的~ NotYou (【姑蘇】陆草纯)Mon Jul 16 20:26:19 2012) 提到: 就是这样,以前类似问题向jyy大神请教过, bankq (Ripa)Mon Jul 16 22:32:29 2012) 提到: 原来\n会刷新,学习了! mutalisk (mutalisk)Wed Jul 18 20:15:15 2012) 提到: 默认终端是行缓存的 文件是全缓存的 换行符会刷新终端,但是文件不会  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值