struct dirent в определении C d_name[256] и NAME_MAX

Я смущен использованием d_name[256] а также NAME_MAX в определении структуры. Есть ли d_name[256] означает, что длина имени файла может быть не более 256 символов? Затем также упоминается NAME_MAX (цитируется внизу). Итак, мой вопрос, как NAME_MAX относится здесь и где я могу найти NAME_MAX значение и определение?

В man readdirstruct dirent определяется следующим образом.

struct dirent {
    ino_t          d_ino;       /* inode number */
    off_t          d_off;       /* not an offset; see NOTES */
    unsigned short d_reclen;    /* length of this record */
    unsigned char  d_type;      /* type of file; not supported
                                    by all filesystem types */
    char           d_name[256]; /* filename */
};

Он также утверждает, что

Единственные поля в структуре dirent, которые обязательны для POSIX.1: d_name[]неопределенного размера, не более NAME_MAX символы, предшествующие завершающему нулевому байту ('\0'); и (как расширение XSI) d_ino, Другие поля нестандартны и присутствуют не во всех системах; см. примечания ниже для некоторых дополнительных деталей.

1 ответ

Решение

NAME_MAX объявлен в limits.h, Вы также можете использовать pathconf() или же fpathconf() чтобы получить ограничение для каждой файловой системы.

long max = pathconf(pathname, _PC_NAME_MAX);

Поскольку структура имеет это жестко 256, он не может обрабатывать файловые системы с более длинными именами файлов. Так NAME_MAX обязательно будет максимум 255 (что действительно является его ценностью на моей машине с OS X).

Другие вопросы по тегам