我每隔几秒钟从 procfs 读取一些文件,并显示信息。我不是每次都打开和关闭文件,而是维护打开的文件句柄并在完成时关闭它们。问题是我一直在获取旧数据。从第一次读取收集的信息会在后续读取中返回,并且我已经确认 procfs 文件确实在更改。
我发现的唯一解决方法是在读取数据时在 rewind() 之前执行 fflush()。这有效,但我不明白为什么。我知道如果我有两个程序读取和写入同一个文件,则需要在生产者端使用 fflush() 以允许消费者看到这些更改。在这里,我在消费者端做了一个 fflush() 并且它有效。生产者和消费者不是有不同的文件句柄,所以消费者中的 fflush() 不会 fflush() 生产者写入的数据吗?
任何想法为什么我在没有 fflush() 的情况下获得陈旧数据,以及使用 fflush() 获得最新信息?