मौन os.rename विफलता

वोट
2

मान लीजिए कि मैं दो फ़ाइलों जो एक दूसरे के hardlinked कर रहे हैं करते हैं:

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

फिर, मैं अजगर में इस चलाएँ:

>>> 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 पर हूँ।

धन्यवाद!

28/07/2015 को 15:44
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
3

पायथन के os.renameसमारोह बस करता है renameसिस्टम कॉल। स्रोत और लक्ष्य एक ही फाइल कर रहे हैं, सिस्टम कॉल चुपचाप कुछ नहीं करता है। मैं अपने अजगर स्क्रिप्ट को एक ही परिणाम प्राप्त अगर मैं सी कार्यक्रम चलाने:

#include <stdio.h>

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

यह प्रिंट result = 0और दोनों फ़ाइलों को छोड़ देता है।

यह व्यवहार में प्रलेखित है लिनक्स आदमी पेज :

यदि oldpath और Newpath हार्ड लिंक एक ही फाइल की चर्चा करते हुए मौजूदा रहे हैं, तो rename()कुछ नहीं करता है, और एक सफलता स्थिति देता है।

यह भी में निर्दिष्ट किया जाता POSIX :

तो पुराने तर्क और नए एक ही मौजूदा फाइल करने के लिए तर्क संकल्प, rename()सफलतापूर्वक लौट सकते हैं और कोई अन्य क्रिया को निष्पादित करेगा।

28/07/2015 को 16:00
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more