gpt4 book ai didi

c++ - 读取时文件被删除并重新创建。如何处理?

转载 作者:行者123 更新时间:2023-12-04 03:34:23 25 4
gpt4 key购买 nike

我有一个程序(我们称它为消费者)打开并持续读取文件。该文件由另一个程序(我们称之为生产者)创建和写入。有时,文件会被删除(手动)并由制作者重新创建。问题是,消费者并不知道这一点,并通过没有新数据的旧 FD 继续读取旧文件。我的问题是,我们是否有办法检测消费者中的这种情况(无需在消费者和生产者之间添加某种通信机制)。

我的初步想法是,当我打开文件时,我使用fstat() 来获取文件的inode 号。我可以稍后使用 stat() 再次获取 inode 的编号。如果inode的编号相同,则为同一个文件,如果编号发生变化,则表示该文件已被删除并已创建。所以我可以重新打开文件,然后可以从新文件中读取数据。

这个想法总是行得通吗?有没有其他更好的方法来做到这一点。谢谢。

最佳答案

do we have a way to detect this situation in consumer

在 Linux 上,您可以使用 inotify 观察文件的目录,并等待诸如 moved_todelete 之类的事件对该文件执行然后行动。

在 shell 的伪代码中它看起来像:

watched_file=....
dir_of_watched_file=$(dirname "$watched_file")
inotifywait -m -q -e moved_to --no-newline --format "%w%f%0" "$dir_of_watched_file" |
while IFS= read -r -d '' line; do
if [[ "$line" = "$watched_file" ]]; then
: och, the file was moved to
reopen "$watched_file"
fi
done

关于c++ - 读取时文件被删除并重新创建。如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67209045/

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