Linux标准输出行缓冲以及重定向


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'的那个版本着不能正确工作。这是因为当我们的目的地不是屏幕时,涉及到文件缓冲的问题,即,我们写一个字符到文件时不是立即写到磁盘上!!!而是写道进程独有的文件缓存中,只有通过强制刷新操作,字符才会写到文件里。



你可能感兴趣的:(linux,FileSystem,stdio)