[英]Silent os.rename failure
假設我有兩個相互鏈接的文件:
-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中運行它:
>>> import os
>>> os.rename('foo', 'bar')
我沒有錯誤。 但是,再次列出目錄,我仍然看到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。
謝謝!
Python的os.rename
函數僅執行rename
系統調用。 如果源和目標是同一文件,則系統調用將無提示地執行任何操作。 如果運行C程序,我得到的結果與您的Python腳本相同:
#include <stdio.h>
int main() {
int result = rename("foo", "bar");
printf("result = %d\n", result);
}
這將打印result = 0
並保留兩個文件。
Linux手冊頁中記錄了此行為:
如果oldpath和newpath是引用同一文件的現有硬鏈接,則named
rename()
不執行任何操作,並返回成功狀態。
這也在POSIX中指定:
如果舊參數和新參數解析為相同的現有文件,則
rename()
將成功返回並且不執行其他任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.