加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

读取/ proc时刷新流缓冲区

发布时间:2020-12-13 18:54:28 所属栏目:Linux 来源:网络整理
导读:我正在从/ proc / pid / task / stat中读取以跟踪线程中的cpu使用情况. fopen on / proc / pic / task / stat fget来自流的字符串 字符串上的sscanf 我遇到问题但是要让流缓冲区更新. 如果我翻了1024个字符如果刷新,但如果我fget 128个字符然后它永远不会更

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读