c++ - 你如何检测你打开的文件在打开后被移动了

标签 c++ linux file inode

如标题所述:

  • 我的程序打开一个文件。
  • 有什么东西出现并移动了那个文件。 inode应该是一样的,只是名字不一样。
  • 关闭文件,然后删除,但它已经不存在了

那么我怎样才能检测到它已被移动并删除正确的文件名呢?

有什么想法吗?

最佳答案

你可以使用 inotify检测对旧名称的更改(查找 IN_MOVE_SELF 事件)。但是,如果您的真正目标只是删除文件名,则可以在打开文件后立即执行此操作(使用 unlink(2))。 Unix 文件语义将允许您继续使用打开的文件,并且在您的句柄关闭之前,磁盘上的数据不会真正被删除。然后没有人能够重命名该文件。

关于c++ - 你如何检测你打开的文件在打开后被移动了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885248/

相关文章:

c++ - 在 C++ 中使用默认参数跳过模板参数真的不可能吗,为什么语法另有建议?

c++ - 试图对两个编译时元组整数序列求和

c++ - ADL 是否适用于全局 namespace ?

linux - 多行复制粘贴到 mongo shell

linux - 如何将 laravel 项目从 Windows 迁移到 Linux?

java - 无法使用 Apache Tomcat 服务器访问硬盘驱动器中的文件

file - 大文件的 awk 和 sum 行

c++ - Nim 变体游戏策略 - StoneGameStrategist - SRM 309

c - 什么是tcp_autocorking(tcp自动corking)

php - 使用 SplFileObject 向现有 TXT 文件添加新行