int main(void)
{
fprintf(stdout,"%u",getpid());
fflush(stdout);
while(1);
return 0;
}
上这个程序会在屏幕上打印当前进程序列号。并且不退出。
如果程序写成
int main(void)
{
fprintf(stdout,"%u",getpid());
// fflush(stdout);
while(1);
return 0;
}
注释掉fflush函数。在屏幕上你不会看到任何输出。
如果你想让他打印出来你应该这样写
int main(void)
{
fprintf(stdout,"%u\n",getpid()); /* 这里多了 \n */
// fflush(stdout);
while(1);
return 0;
}
这次你会看到输出在屏幕上。
这个实验是告诉我们Linux标准输出是行缓冲的。所谓行缓冲是一行一缓冲。
那是不是这种方式与通过fflush()刷新就是一样的呢?
其实还是略有不同的。
我们将两个正确输出版本的程序分别如下执行:
xxxxxxxxx > log
即将它们的标准输出重定向到某一个文件,而不是屏幕。
这时,使用fflush的程序可以正常完成操作,在不退出的情况下。
而使用'\n'的那个版本着不能正确工作。这是因为当我们的目的地不是屏幕时,涉及到文件缓冲的问题,即,我们写一个字符到文件时不是立即写到磁盘上!!!而是写道进程独有的文件缓存中,只有通过强制刷新操作,字符才会写到文件里。