我正在尝试使用fuse实现内存中的文件系统。重命名函数接受'from'和'to'参数。
当我尝试在bash上执行此操作时, mv file1 file2 , 它在内部调用重命名函数(我使用-d选项来检查它)。
当我尝试在GUI中重命名该功能时,它再次调用重命名功能。
但是如果file2是一个已经存在的文件, mv 命令会覆盖它,而GUI则阻止我重命名该文件。如何强制执行此约束,因为这两个操作内部都没有区别地调用重命名函数。
答案 0 :(得分:1)
rename
函数通过删除旧名称原子替换目标文件。这就是它的全部要点,如果它没有正确地做到这一点,各种各样的事情都会严重破坏。对于希望阻止在另一个文件之上重命名的应用程序,他们必须首先使用link
函数(如果目标存在则会失败),然后使用unlink
旧名称link
成功了。