我正在从/ proc / pid / task / stat读取以跟踪线程中的cpu使用情况。 fopen on / proc / pic / task / stat fget来自流的字符串 字符串上的sscanf
我遇到问题但是要让流缓冲区更新。 如果我翻了1024个字符如果刷新,但如果我fget 128个字符然后它永远不会更新,我总是得到相同的统计数据。 我在阅读之前回放了流,并尝试了fsync。
我经常这样做,所以我不想每次都重新打开文件。 这样做的正确方法是什么?
答案 0 :(得分:4)
并非每个程序都受益于缓冲I / O的使用。
在您的情况下,我想我会使用read(2)
1 。这样,你:
对于您所描述的案例,效率提升可能与今天非常强大的CPU无关。但我要指出像cp(2)
和其他重型数据移动器这样的程序不使用缓冲的I / O包。
1.即open(2)
,read(2)
,lseek(2)
和close(2)
。
2.或许要拦截一个论点,在与此相关的问题上,有人通常会提出fflush(stdin)
的“有用”建议,然后另一个人准确地指出fflush()
是仅由C99在输出流上定义,并且依赖于特定于实现的行为通常是不明智的。
功能