sshfs SSH फ़ाइल स्थानांतरण प्रोटोकॉल (SFTP) का उपयोग करता है। आपके द्वारा सक्षम किया गया वर्कअराउंड उस प्रोटोकॉल पर एक नाम () ऑपरेशन के शब्दार्थ के आसपास काम कर रहा है जब "नया" नाम पहले से मौजूद है।
इस मामले में नाम बदलने () के लिए POSIX व्यवहार मौजूदा फ़ाइल को हटाने और नाम बदलने को पूरा करने के लिए है।
SFTP प्रोटोकॉल में, आप SSH_FXP_RENAME ऑपरेशन के साथ फ़ाइल का नाम बदल सकते हैं; हालाँकि, इसका व्यवहार तब होता है जब लक्ष्य नाम पहले से मौजूद होता है, आप जिस प्रोटोकॉल का उपयोग कर रहे हैं उसके संस्करण पर निर्भर करते हैं और आप किस झंडे को पास करते हैं। SFTP प्रोटोकॉल के लिए विकिपीडिया पृष्ठ प्रोटोकॉल के विभिन्न संस्करणों के लिए विभिन्न मसौदा RFC के लिए संबंध हैं। में ड्राफ्ट 00 व्यवहार के रूप में सूचीबद्ध है:
यह एक त्रुटि है अगर वहाँ पहले से ही newpath द्वारा निर्दिष्ट नाम के साथ एक फ़ाइल मौजूद है।
में ड्राफ्ट 13 , व्यवहार रूप में सूचीबद्ध है
यदि झंडे में SSH_FXP_RENAME_OVERWRITE शामिल नहीं है, और पहले से ही newpath द्वारा निर्दिष्ट नाम के साथ एक फ़ाइल मौजूद है, तो सर्वर को SSH_FX_FILE_ALREADY_EXISTS के साथ जवाब देना होगा।
यदि झंडे में SSH_FXP_RENAME_ATOMIC शामिल है, और गंतव्य फ़ाइल पहले से मौजूद है, तो इसे एक परमाणु फैशन में बदल दिया जाता है। यानी, ऐसे समय में कोई भी अवलोकन योग्य नहीं है जहां नाम पुरानी या नई फ़ाइल का संदर्भ नहीं देता है। SSH_FXP_RENAME_ATOMIC का अर्थ है SSH_FXP_RENAME_OVERWRITE।
लक्ष्य नाम मौजूद होने पर नाम बदलने () संचालन की संभावित विफलता से निपटने के लिए, sshfs निम्नलिखित वर्कअराउंड प्रदान करता है (यदि सक्षम है) :
if (err == -EPERM && sshfs.rename_workaround) {
size_t tolen = strlen(to);
if (tolen + RENAME_TEMP_CHARS < PATH_MAX) {
int tmperr;
char totmp[PATH_MAX];
strcpy(totmp, to);
random_string(totmp + tolen, RENAME_TEMP_CHARS);
tmperr = sshfs_do_rename(to, totmp);
if (!tmperr) {
err = sshfs_do_rename(from, to);
if (!err)
err = sshfs_unlink(totmp);
else
sshfs_do_rename(totmp, to);
}
}
}
इस कोड में "से" उस फ़ाइल का मौजूदा नाम है जिसका हम नाम बदलना चाहते हैं और "to" वह नया नाम है जिसे हम चाहते हैं। कुछ पथ लंबाई और त्रुटि बहीखाता को एक तरफ रखकर, यह काम चारों ओर
- "" से "टोटप" का नाम बदलें
- "से" तक "नाम"
- अनलिंक (हटाता है) "टोटप"
यह "फ़ाइल पहले से मौजूद है" संघर्ष से बचा जाता है, लेकिन नाम बदलने () संचालन के शब्दार्थ को भी बदल देता है, यही कारण है कि आप इसे डिफ़ॉल्ट रूप से नहीं करना चाहेंगे।