\n 刷新缓冲区问题

pid_t pid;
printf("hello ");
pid=fork();
printf("world  ");

执行结果是打印了两行 hello world
问题出现在 printf ,它是有数据缓冲区的,不加  \n 数据不刷新
fork()创建子进程时,复制了父进程的数据段和堆栈段,包括上面所讲的缓冲区,在执行后面的 printf ,就打印了两遍hello world.

pid_t pid;
printf("hello \n");
//fflush(stdout);
pid=fork();    
printf("world  ");

这段代码的执行结果是 
hello
hello world

如果加上 \n 后,换行符会刷新缓冲区,将 hello 输出,printf 数据缓冲区被洗,fork()执行完,打印两次 world 就结束了。fflush(stdout) 和 \n 效果相同。

这是为什么呢? 这是由【设备的不同缓冲属性】决定的。我们现实运行结果的设备是标准输出设备,而【标准输出设备在正常情况下是linux中的行缓存的设备(除出错)】,’\n’正是换行符,所以会换行时清空缓存。而linux中写入文件流是全缓存的,也就是换行符并不会冲洗缓冲区

printf("pid=%d",getpid());
fork();

这段代码两次打印的都是父进程的 pid

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值