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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值