Шрифт:
Однако, «хитрость» при работе с каталогами состоит в том, что смещения задаете вы сами, и управление ими тоже всецело лежит на вас. Это означает, что вы можете назначать смещения элементов в каталоге равными как «0», «2» и так далее, так и «0», «64», «128» и так далее. Единственно, что здесь необходимо предусмотреть — чтобы обработчики io_lseek и io_read одинаково трактовали эти смещения.
В приведенном ниже примере мы предположим, что используется простой подход с номерами «0», «1», «2», и т.д. (Вы могли бы использовать «0», «64», «128», и т.д., если бы эти числа соответствовали, например, неким смещениям на носителе. Выбор за вами!)
Ну вот, остается «просто» заполнить
Коротко о ее полях:
d_ino | «Индексный дескриптор» («inode») — уникальный для точки монтирования порядковый номер, который не может быть нулевым (нуль указывал бы на то, что элемент, соответствующий данному индексному дескриптору, является свободным/пустым). |
d_offset | Смещение в каталоге, о котором мы только что говорили. В нашем примере это будут обычные числа типа «0», «1», «2», и т.д. |
d_reclen | Размер структуры struct dirent целиком, включая любые добавляемые в нее расширения. Заполнители для выравнивания при вычислении размера учитываются. |
d_namelen | Число символов в поле d_name, не включая признак конца строки NULL. |
d_name | Имя элемента каталога, которое должно завершаться признаком конца строки — NULL. |
При возврате структур типа
Давайте для примера создадим администратора каталогового ресурса
Приведенный пример показывает, что в каталоге
Теперь, когда мы знаем нужные характеристики, давайте посмотрим на код. Он разбит на следующие функции:
main и декларации
Основная функция; здесь мы все инициализируем и запускаем наш администратор ресурса.
my_open
Обработчик сообщения _IO_CONNECT.
my_read
Обработчик сообщения _IO_READ.
my_read_dir и my_read_file
Выполняют фактическую работу функции my_read.
dirent_size и dirent_fill
Сервисные функции для работы со структурой
Заметьте, что при том, что разбит на короткие секции, перемежаемые текстовыми пояснениями, архив с полным исходным текстом в виде единого файла можно взять на веб-сайте компании PARSE Software Devices (