Смысл большинства ужасных аргументов - PullRequest
0 голосов
/ 08 мая 2020

Мне трудно понять смысл всех этих параметров в структуре dirent.

struct dirent{
        ino_t           d_ino;      Inode number
        off_t           d_off;      Not an offset; see below
        unsigned short  d_reclen;   Length of this record
        unsigned chart  d_type;     Type of file; 
                                    not supported by all filesystem types

        char            d_name[256]; Null-Terminated filename
    }

Мне действительно нужно это понять, потому что мне нужно работать с некоторыми файлами. Правильно, если я ошибаюсь, эта структура возвращается, когда вы используете opendir для объекта DIR *, верно? Этот объект не является чем-то другим, кроме метаданных файла внутри каталога, и каждый раз, когда я его использую, он будет возвращать мне метаданные следующего файла, верно?

Параметры, которые я не понимаю: d_off -> не зачет? Что тогда? Смотрите ниже где? Я проверил исходную страницу со всей информацией и не смог найти, где мне следовало искать. d_type -> что они означают «не поддерживается всеми типами файловых систем»? На какую файловую систему мне следует обратить внимание? Хорошо, с этой информацией, как я могу открыть файл, в котором мне нужно изменить данные? Я просто использую d_name или есть что-то более удобное, на что я могу положиться? Это все мои сомнения, заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Стандарт POSIX определяет только структуру, имеющую d_ino и d_name. Остальные поля структуры: Linux Speci c.

На странице руководства Linux указано, что d_off относится к функции telldir , и что его следует рассматривать как непрозрачное значение.

Короче говоря, вам никогда не нужно читать или иным образом использовать этот член.

Что касается члена d_type, его значения и значений хорошо документирован в странице руководства Linux . В любой нормальной файловой системе он должен быть допустимым.

0 голосов
/ 08 мая 2020

Единственные два члена этой структуры, которые гарантированно существуют согласно posix, это d_name и d_ino. ( Source )

Другими словами, вы должны игнорировать другие структурные члены и используйте только следующие стандартные функции для управления структурами dirent.

...