沉默操作系统重命名法鲁

2024-09-27 23:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个文件是硬链接的:

-rw-rw-r-- 2 mparrott grp 5 Jul 28 09:38 bar
-rw-rw-r-- 2 mparrott grp 5 Jul 28 09:38 foo

然后,我在python中运行:

^{pr2}$

我没有错误。但是,再次列出目录,我仍然看到foo。在

-rw-rw-r-- 2 mparrott grp 5 Jul 28 09:38 bar
-rw-rw-r-- 2 mparrott grp 5 Jul 28 09:38 foo

发生这种情况似乎是因为这些文件确实是同一个文件(inode)。但是,我仍然希望foo被删除或引发一个错误。在

有人知道这为什么会悄无声息地失败吗?我的问题是关于实现本身,而不是如何解决这个问题(我使用os.path.samefile)解决问题。我用的是rhel 6.4。在

谢谢!在


Tags: 文件path目录fooos链接错误bar
1条回答
网友
1楼 · 发布于 2024-09-27 23:22:17

Python的os.rename函数只执行rename系统调用。如果源和目标是同一个文件,则系统调用不会静默执行任何操作。如果我运行C程序,得到的结果与Python脚本相同:

#include <stdio.h>

int main() {
    int result = rename("foo", "bar");
    printf("result = %d\n", result);
}

这将打印result = 0并保留这两个文件。在

此行为记录在Linux man page

If oldpath and newpath are existing hard links referring to the same file, then rename() does nothing, and returns a success status.

这也在POSIX中指定:

If the old argument and the new argument resolve to the same existing file, rename() shall return successfully and perform no other action.

相关问题 更多 >

    热门问题