यदि मेरे पास लिनक्स या मैक ओएस एक्स जैसे पॉज़िक्स सिस्टम हैं, तो यह निर्धारित करने के लिए सबसे अच्छा और सबसे पोर्टेबल तरीका क्या है कि कोई पथ केवल-पढ़ने वाली फाइल सिस्टम पर है या नहीं? मैं अपने सिर के ऊपर से 4 तरीके के बारे में सोच सकते हैं:यह निर्धारित करने के लिए सबसे अच्छा पॉज़िक्स तरीका है कि कोई फ़ाइल सिस्टम माउंट किया गया है केवल
open(2)
एक फ़ाइलO_WRONLY
साथ - आप एक अद्वितीय फ़ाइल नाम के साथ आने के लिए और भीO_CREAT
औरO_EXCL
में पास की आवश्यकता होगी। यदि यह विफल रहता है और आपके पासEROFS
का इरनो है तो आप जानते हैं कि यह केवल पढ़ने-योग्य फाइल सिस्टम है। वास्तव में उस फाइल को बनाने का कष्टप्रद दुष्प्रभाव होगा जिसकी आपको परवाह नहीं है, लेकिन आप इसे बनाने के तुरंत बादunlink(2)
कर सकते हैं।statvfs(3)
- लौटेstruct statvfs
के क्षेत्रों में से एकf_flag
है, और झंडे में से एक केवल पढ़ने के लिए फाइल सिस्टम के लिएST_RDONLY
है। हालांकि,statvfs(3)
के लिए spec यह स्पष्ट करता है कि अनुप्रयोग मान्य जानकारी वाले किसी भी फ़ील्ड पर निर्भर नहीं हो सकते हैं। ऐसा लगता है किST_RDONLY
एक सभ्य संभावना है जो केवल पढ़ने-योग्य फाइल सिस्टम के लिए सेट नहीं हो सकता है।access(2)
- आप माउंट बिंदु जानते हैं, तो आप के रूप में लंबेW_OK
ध्वज के साथaccess(2)
उपयोग कर सकते हैं के रूप में आप किसी ऐसे उपयोगकर्ता को माउंटप्वाइंट में लिखने के रूप में चल रहे हैं। हां, या तो आप रूट हैं या इसे आपके यूआईडी के साथ माउंट पैरामीटर के रूप में रखा गया था। आपको -1 का रिटर्न वैल्यू मिलेगा औरEROFS
की इरनो मिलेगी।पार्सिंग
/etc/mtab
या/proc/mounts
- पोर्टेबल प्रतीत नहीं होता है। ऐसा लगता है कि मैक ओएस एक्स में इनमें से कोई भी नहीं है। यहां तक कि अगर सिस्टम में/etc/mtab
है, तो मुझे यकीन नहीं है कि फ़ील्ड ओएस के बीच सुसंगत हैं या यदि केवल पढ़ने के लिए माउंट विकल्प (लिनक्स परro
) पोर्टेबल हैं।
क्या अन्य तरीके हैं जो मुझे याद आ रही है? अगर आपको यह जानने की ज़रूरत है कि फाइल सिस्टम केवल पढ़ने के लिए माउंट किया गया था, तो आप इसे कैसे करेंगे?
mtab पर, अगर एक फ़ाइल सिस्टम rw घुड़सवार है लेकिन बाद में ro जाता है, mtab अद्यतन नहीं होगा।/proc/माउंट सही ढंग से अपडेट हो जाएगा। – Ryaner