读取/ proc时刷新流缓冲区

前端之家收集整理的这篇文章主要介绍了读取/ proc时刷新流缓冲区前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在从/ proc / pid / task / stat中读取以跟踪线程中的cpu使用情况.
fopen on / proc / pic / task / stat
fget来自流的字符串
字符串上的sscanf

我遇到问题但是要让流缓冲区更新.
如果我翻了1024个字符如果刷新,但如果我fget 128个字符然后它永远不会更新,我总是得到相同的统计数据.
我在阅读之前回放了流,并尝试了fsync.

我经常这样做,所以我不想每次都重新打开文件.
这样做的正确方法是什么?

最佳答案
并非每个程序都受益于缓冲I / O的使用.

在你的情况下,我想我会使用read(2)1.这样,你:

>消除所有陈旧的buffer2问题
>通过消除双缓冲可能会跑得更快
>可能使用更少的内存
>绝对简化实施

对于您所描述的情况,效率增益可能与当今功能非常强大的cpu无关.但我要指出像cp(2)和其他重型数据移动器这样的程序不使用缓冲I / O包.

即,打开(2),读取(2),lseek(2),然后关闭(2).
2.也许是为了拦截一个论点,在与此相关的问题上,有人通常会提供一个与fflush(stdin)一致的“有用”建议,然后另一个人来准确地指出fflush()是由C99定义的.仅在输出流上,依赖于特定于实现的行为通常是不明智的.

猜你在找的Linux相关文章