有没有办法让文件系统/服务器在写入时用实际文件替换符号链接?类似 inotify 之类的东西可以工作,但据我所知,我无法在执行写入操作之前运行代码?
我想在文件系统级别实现这一点。但是,大多数情况下,如果 webdav 或 smb 更合适,则文件是通过 webdav 或 smb 提供的。
答案1
您想要实现的目标并不十分明确。我认为您想要的是获取所有内容后用文件替换链接?
当您打开软链接时,它会打开目的地,因此您无法执行此操作。您必须unlink(filename)
先open(filename, O_CREAT | ...)
。
但是,如果您想要将文件准备好,则需要将文件保存在同一文件夹中,但使用不同的名称(即"<filename>.tmp"
)。然后,一旦准备好,您unlink(filename);
就可以rename(filename + ".tmp", filename);
。
这样,文件不存在的时间就非常短(假设您的进程不会在“错误的时间”被切断)。大多数复制文件的系统都使用该技术:scp
、rsync
等。