stdout缓冲区的疑问
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int glob = 6;
int main(int argc,char** argv)
{
int fd;
int iRet;
int var;
pid_t pid;
var = 88;
var++;
/*setbuf(stdout, NULL);*/
printf("pid:%d before fork()\n", getpid());
if ((pid = fork()) == 0)
{
glob++;
var++;
}
else if(pid < 0)
{
glob++;
var++;
}
printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
return 0;
}
编译之后 直接执行./a.out 会在屏幕上打印出三行
pid:22298 before fork()
pid = 22299, glob = 7, var = 90
pid = 22298, glob = 6, var = 89
但是如果./a.out>kk
cat kk之后
发现kk里面有4行
其中有两行 before fork()
pid:22332 before fork()
pid = 22333, glob = 7, var = 90
pid:22332 before fork()
pid = 22332, glob = 6, var = 89
--------------------------------
感觉有点怪怪的 可能是stdout缓冲区的原因把
我加上setbuf(stdout, NULL)这条语句就好了
但是不知道原因
请高手解释一下
...全文
相关推荐
C语言中printf()缓冲问题详解
主要给大家介绍了关于C语言中printf()缓冲问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
关于sys.stdout和print的区别详解
今天小编就为大家分享一篇关于sys.stdout和print的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
python中stdout输出不缓存的设置方法
考虑以下python程序:复制代码 代码如下:#!/usr/bin/env pythonimport syssys.stdout.write(“stdout1 “)sys.stderr.write(“stderr1 “)sys.stdout.write(“stdout2 “)sys.stderr.write(“stderr2 “)其中的sys.stdout.write也可以换成print。运行这程序,你觉得会输出什么?试验一下,就会发现,其实输出并不是复制代码 代码如下:stdout1 stderr1 stdout2 stderr2而是:复制代码 代码如下:stderr1 stderr2 s
python运行时强制刷新缓冲区的方法
今天小编就为大家分享一篇python运行时强制刷新缓冲区的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
解析c中stdout与stderr容易忽视的一些细节
本篇文章是对在c语言中stdout与stderr容易忽视的一些细节进行了详细的分析介绍,需要的朋友参考下


