struct dirent в определении C d_name[256] и NAME_MAX
Я смущен использованием d_name[256]
а также NAME_MAX
в определении структуры. Есть ли d_name[256]
означает, что длина имени файла может быть не более 256 символов? Затем также упоминается NAME_MAX (цитируется внизу). Итак, мой вопрос, как NAME_MAX
относится здесь и где я могу найти NAME_MAX
значение и определение?
В man readdir
struct 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).