gpt4 book ai didi

c - 从文件指针获取旧数据(生产者和消费者问题)

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:42 25 4
gpt4 key购买 nike

我每隔几秒从 procfs 读取一些文件,并显示信息。我不是每次都打开和关闭文件,而是维护打开的文件句柄并在完成后关闭它们。问题是我一直在获取旧数据。从第一次读取中收集的信息会在后续读取中返回,我已确认 procfs 文件确实在发生变化。

我发现的唯一解决方法是在读取数据时在 rewind() 之前执行 fflush()。这行得通,但我不明白为什么。我知道如果我有两个程序读取和写入同一个文件,则生产者端需要一个 fflush() 以允许消费者看到这些更改。在这里,我在消费者端执行 fflush() 并且它有效。生产者和消费者不是有不同的文件句柄,因此消费者中的 fflush() 不会产生生产者写入的 fflush() 数据吗?

为什么我在没有 fflush() 的情况下获得陈旧数据,而使用 fflush() 获得最新信息,有什么想法吗?

最佳答案

文件流通常是缓冲的,这意味着它们在读取之前被复制到内存中,以避免其他进程锁定它们。您必须确保您的 Stream 未被缓冲以持续从硬盘检索信息。为此,请使用 setbuf (stream,NULL ); 确保您的缓冲区已清除。您可以在此处阅读有关 setbuf 的信息: http://www.cplusplus.com/reference/clibrary/cstdio/setbuf/

我假设您的流被缓冲的原因是因为 fflush(stream) 清除缓冲流。你可以在这里阅读: http://www.cplusplus.com/reference/clibrary/cstdio/fflush/

关于c - 从文件指针获取旧数据(生产者和消费者问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com