निर्देशिकाओं को फ़ाइलों के रूप में पढ़ने योग्य कब रोका गया?


29

मेरे पास द यूनिक्स प्रोग्रामिंग पर्यावरण पुस्तक का पहला संस्करण है। अध्याय 2 में, लेखक बताते हैं कि निर्देशिका फाइलों के रूप में पठनीय हैं, और इन फाइलों के प्रारूप के बारे में कुछ तथ्यों का उल्लेख करते हैं। वे कुछ उदाहरण देते हैं जैसे cat .(व्यायाम 2-2 में)।

कम से कम डार्विन में, निर्देशिका अब फ़ाइलों के रूप में पठनीय नहीं हैं। कम से कम, जब वे पढ़ते हैं तो वे शून्य-लंबाई वाली फ़ाइल दिखाई देते हैं।

यह परिवर्तन कब हुआ, और क्या इसके बारे में कोई आधिकारिक दस्तावेज है?


1
मुझे याद है कि सन सोलारिस पर कुछ समय 1991sep-1995jun काम कर रहा था। मुझे लगता है कि इसने उस समय की अवधि में भी मेरे लिए काम करना बंद कर दिया। जब हमने सिस्टम V के साथ स्पार्क मशीनों को अपग्रेड किया (अच्छी तरह से याद नहीं कर सकते हैं)। यह संभवतः फ़ाइल-सिस्टम पर निर्भर करता है। यदि फ़ाइल-सिस्टम डेटा को बिल्कुल वर्णित के रूप में संग्रहीत नहीं करता है, तो यह तब तक टूट जाएगा जब तक कि संगतता परत नहीं जोड़ी जाती। डेबियन गनु + लिनक्स का उपयोग करके आज भी काम नहीं करता है।
ctrl-alt-delor-Sepor

1
मुझे पता है कि एक निर्देशिका के रूप में एक फाइल को पढ़ने में 80 के दशक के अंत में यूनिक्स सिस्टम वी के तहत काम किया गया था - 90 के दशक की शुरुआत में। इसने सनोस के तहत काम किया। इसने Irix के कुछ संस्करणों के तहत काम किया। मुझे लगता है कि वर्चुअल फाइल सिस्टम पर जाने और कई अंतर्निहित डिस्क संगठनों को अनुमति देने का मतलब है कि आप वास्तव में इसे कुशलता से समर्थन नहीं कर सकते।
ब्रूस एडगर

8
अधिक (गैर-आधिकारिक) जानकारी यहां पाई जा सकती है: utcc.utoronto.ca/~cks/space/blog/unix/ReaddirHistory
camh

मैंने AIX और सोलारिस पर जाँच की - वास्तव में, AIX पर आप cat .Solaris 11 (लिनक्स में) पर रहते हुए भी आप नहीं कर सकते। ठंडा।
gena2x

जवाबों:


13

नवीनतम POSIX विनिर्देश (POSIX.1-2008) से त्रुटि संख्या संदर्भ बताता है:

[EISDIR]

एक निर्देशिका है। निर्दिष्ट मोड के साथ एक निर्देशिका खोलने का प्रयास किया गया था।

इसका मतलब यह है कि, एक POSIX आज्ञाकारी OS पर, आपको एक निर्देशिका (यदि आपने इसे केवल O_RDONLY) पढ़ा है तो पढ़ने में सक्षम होना चाहिए।

मैंने सिर्फ एक नेटबीडी (जो वास्तव में पोसिक्स के बारे में परवाह करता है) बॉक्स पर यह कोशिश की है, और उम्मीद के मुताबिक काम करता है, जबकि यह जीएनयू / लिनक्स पर EISDIR (जो नहीं होना चाहिए) के साथ विफल रहता है।

लिनक्स पर एक त्वरित नज़र से पता चलता है कि यह इरादा है ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):

ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
{
        return -EISDIR;
}

हालांकि एक ठोस फाइल सिस्टम कार्यान्वयन इसे ओवरराइड कर सकता है (जैसे CEPH करता है: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), डिफ़ॉल्ट व्यवहार EISDIR को वापस करने के लिए है जो कोई व्यक्ति कोशिश कर रहा है रीड () एक डायरेक्टरी, भले ही वह ओपन रीड ही हो।

मैंने इस परिवर्तन को 2.0.x पर वापस ट्रेस किया है, और कम से कम ext2 फाइल सिस्टम के लिए, यह अभी भी मामला था।

तो, हाँ, POSIX अनुरूप ओएस पर आपको एक निर्देशिका पढ़ने में सक्षम होना चाहिए, लेकिन कुछ कर्नेल (जैसे लिनक्स और, जाहिर है, अन्य) बस इस स्थिति को अनदेखा करें और मानक को तोड़ दें।


6
ओपन ग्रुप के अनुसार, मानक के XSI एक्सटेंशन के तहत लिनक्स का व्यवहार यहाँ कानूनी हैreaddir(2)अधिक पोर्टेबल है। इससे ओपी के सवाल का सही उत्तर मुझे पता चलता है "जब XSI लोकप्रिय हो गया।"
केविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.