读取/ proc时刷新流缓冲区

时间:2011-01-21 00:44:29

标签: c linux

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

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

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

1 个答案:

答案 0 :(得分:4)

并非每个程序都受益于缓冲I / O的使用。

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

  • 消除所有陈旧缓冲 2 问题
  • 可能通过消除双缓冲来更快地运行
  • 可能使用更少的内存
  • 绝对简化了实施

对于您所描述的案例,效率提升可能与今天非常强大的CPU无关。但我要指出像cp(2)和其他重型数据移动器这样的程序不使用缓冲的I / O包。


1.即open(2)read(2)lseek(2)close(2)
2.或许要拦截一个论点,在与此相关的问题上,有人通常会提出fflush(stdin)的“有用”建议,然后另一个人准确地指出fflush()是仅由C99在输出流上定义,并且依赖于特定于实现的行为通常是不明智的。 功能