【问题标题】:how to rewind proc file如何倒带proc文件
【发布时间】:2015-02-03 12:11:26
【问题描述】:

我正在尝试定期(200 毫秒)读取 proc 文件 /proc/stat,并且我试图避免每次打开和关闭 proc 文件。

现在,由于 proc 文件没有与之关联的大小,因此 fseek 和 rewind 将不起作用。如果我错了,请纠正我。 (我记得有些 proc 文件确实有与其相关的大小,但 /proc/stat 肯定没有)

重置 proc 文件的读取指针以启动的正确方法是什么?

【问题讨论】:

    标签: c linux-kernel


    【解决方案1】:

    我发现rewind 工作正常

    #include <stdio.h>
    int main() {
        FILE* fin = fopen("/proc/stat", "r");
        if (!fin) {
            perror("fopen");
            return -1;
            }
        char buf[16*1024];
        while(1) {
            rewind(fin);
            size_t sz = fread(buf, 1, sizeof(buf), fin);
            if (sz) {
                buf[sz]=0;
                printf(buf);
                }
            sleep(5);
            }
        return 0;
        }
    

    【讨论】:

    • 这看起来不错,除了没有退出策略并且标准是每 0.2 秒,而不是每 5 秒,所以使用类似 usleep 或 nanosleep 的东西对于延迟函数来说是一个更好的选择循环。这意味着该函数将在 5 秒(或所需的 0.2 秒)后恢复到“执行”队列,因此要么将 nice 值更改为实时(仍然不是完美的计时),要么根据系统时钟检查经过的时间并调整补偿时间漂移的延迟时间。
    • OP 询问如何重新阅读/proc/stat,因此答案集中在此。假设他可以处理修改时间/睡眠参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多