正如标题所述:
那么如何检测它已被移动并删除正确的文件名?
有什么想法吗?
答案 0 :(得分:2)
您可以使用inotify检测旧名称的更改(查找IN_MOVE_SELF事件)。但如果您的真正目标只是删除文件的名称,则可以在打开文件后立即执行此操作(使用unlink(2))。 Unix文件语义将允许您继续使用打开的文件,并且在关闭句柄之前,实际上不会删除磁盘上的数据。然后没有人能够重命名该文件。
答案 1 :(得分:0)
在关闭之前尝试access(2)
文件。如果您获得ENOENT,则文件已被移动。按照/ proc / self / fd / $ open_file_number / symlink使用readlink(2)
查找新文件名。
答案 2 :(得分:0)
fstat
打开文件,stat
名称,并比较结果。
但是,与任何可能的检查一样,它仍然是活泼的;在您做出任何检查之后但在您采取行动之前,该名称可能会改变其含义。是时候重新审视你的要求了。