linux看不到文件,Linux下明明输出到文件了,为啥tail-f却看不到?

Linux下对文件进行写操作,为什么有时候会有延时?今天一起来测试下。

20180425012357_1c18d9b54c3e6969257225eb7a1ea457_1.jpeg

测试代码是一个打印hello与循环轮数的死循环程序,每打印一行就休眠1秒。

20180425012357_1c18d9b54c3e6969257225eb7a1ea457_2.jpeg

使用./a.out 运行程序后,每隔一秒会在终端输出一个字符串。

20180425012357_1c18d9b54c3e6969257225eb7a1ea457_3.jpeg

使用nohup ./a.out运行程序后,有一个“忽略输入,输出至nohup.out”的提示。

20180425012357_1c18d9b54c3e6969257225eb7a1ea457_4.jpeg

把程序killall干掉之后,果然有一个nohup.out生成。

不过这个文件的大小是0,有点奇怪,启动程序的时候,明明提示了“appending output to nohup.out”呀,这是为什么呢?原本打印在终端的hello字符串去哪里了呢?

nohup.out未能及时输出,是因为nohup后,为了提高性能stdout启用了缓冲,并不会实时把内容写入文件,只有当缓冲写满了才会刷盘。killall程序时,还来不及刷盘程序就退出了,于是出现了空nohup.out文件。

如果想要实时刷盘,可以选择:把缓冲设为空,setbuf(stdout, NULL)强制刷盘,fflush(stdout)

20180425012357_1c18d9b54c3e6969257225eb7a1ea457_5.jpeg

如上图,程序添加一行“fflush(stdout)”之后,再次测试。

20180425012357_1c18d9b54c3e6969257225eb7a1ea457_6.jpeg

就能够看到nohup.out会实时的刷新数据啦。

讨论:打印日志的时候,是需要实时刷新,还是缓存刷新呢?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值