नवीनतम 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 अनुरूप ओएस पर आपको एक निर्देशिका पढ़ने में सक्षम होना चाहिए, लेकिन कुछ कर्नेल (जैसे लिनक्स और, जाहिर है, अन्य) बस इस स्थिति को अनदेखा करें और मानक को तोड़ दें।