我正在读取/ proc/pid/task/stat以跟踪线程中的cpu使用情况。 的fopen上的/ proc/PIC /任务/ STAT fget从流 sscanf的对我有但得到的流缓存更新的问题串读取/ proc时刷新流缓冲区
的字符串。 如果我fget 1024个字符,如果更换,但如果我fget 128个字符,那么它永远不会更新,我总是得到相同的统计数据。 我在读取之前回滚流并尝试了fsync。
我这样做很频繁,所以我宁愿不重新打开文件每次。 什么是正确的方法来做到这一点?
我正在读取/ proc/pid/task/stat以跟踪线程中的cpu使用情况。 的fopen上的/ proc/PIC /任务/ STAT fget从流 sscanf的对我有但得到的流缓存更新的问题串读取/ proc时刷新流缓冲区
的字符串。 如果我fget 1024个字符,如果更换,但如果我fget 128个字符,那么它永远不会更新,我总是得到相同的统计数据。 我在读取之前回滚流并尝试了fsync。
我这样做很频繁,所以我宁愿不重新打开文件每次。 什么是正确的方法来做到这一点?
并非每个程序都从使用缓冲I/O中受益。
在你的情况,我想我只会用read(2)
。这样一来,您:
对于您所描述的情况,效率增益可能不会影响当今功能非常强大的CPU。但我会指出,诸如cp(2)
和其他重型数据移动器的程序不使用缓冲I/O软件包。
1。也就是说,open(2)
,read(2)
,lseek(2)
,和close(2)
。
2.也许要拦截一个论点,在与这个问题有关的问题上,某人通常会沿着fflush(stdin)
提供一个“有帮助”的建议,然后另一个人来精确指出fflush()
由C99在输出流上定义只有依靠实现特定的行为通常是不明智的。
我打算尝试从fopen转换到明天打开。希望这会更好。 – 2011-01-21 01:11:47