我正在从/ 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定义的.仅在输出流上,依赖于特定于实现的行为通常是不明智的.