หมายเลขข้อผิดพลาดอ้างอิงจากข้อมูลจำเพาะ POSIX ล่าสุด (POSIX.1-2008):
[EISDIR]
เป็นไดเรกทอรี มีความพยายามในการเปิดไดเรกทอรีโดยระบุโหมดการเขียน
ซึ่งหมายความว่าในระบบปฏิบัติการที่สอดคล้องกับ POSIX คุณควรจะสามารถอ่าน () ไดเรกทอรีถ้าคุณเปิดอ่านอย่างเดียว (O_RDONLY)
ฉันเพิ่งลองใช้งาน NetBSD (ซึ่งกังวลกับ POSIX) มากและทำงานได้ตามที่คาดหวังในขณะที่มันล้มเหลวบน GNU / Linux ด้วย EISDIR (ซึ่งไม่ควรเกิดขึ้น)
ดูอย่างรวดเร็วที่ Linux แสดงสิ่งนี้มีไว้ ( 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 ได้คุณควรจะสามารถอ่านไดเร็กตอรี่ได้ แต่เมล็ดบางตัว (เช่น Linux และอื่น ๆ ) จะมองข้ามเงื่อนไขนี้และทำลายมาตรฐาน