Посилання на номер помилки з останньої специфікації 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 і, мабуть, інші) просто ігнорують цю умову і порушують стандарт.