как создать символическую ссылку в файловой системе EXT2

Я работаю с файловой системой EXT2 и провел последние 2 дня, пытаясь понять, как создать символическую ссылку. Из http://www.nongnu.org/ext2-doc/ext2.html#DEF-SYMBOLIC-LINKS, "Для всех символических ссылок длиной менее 60 байт данные хранятся в самом индексном узле; в нем используются поля, которые обычно используются для хранения указателей на блоки данных. . Это полезная оптимизация, поскольку мы избегаем выделения полного блока для символической ссылки, а длина большинства символических ссылок составляет менее 60 символов».

Чтобы создать символическую ссылку в /link1 на /source, я создаю новый индекс и говорю, что он получает индекс 24. Поскольку это ‹60 символов, я поместил строку «/source», начиная с поля i_block[0] (поэтому печать new_inode- >i_block[0] в gdb показывает «/dir2/source») и устанавливает i_links_count равным 1, i_size и i_blocks равным 0. Затем я создал запись каталога в inode 2 (корневой inode) со свойствами 24, «link1», и тип файла EXT2_FT_SYMLINK.

Ссылка с именем «link1» создается, но это каталог, и когда я нажимаю на нее, она переходит в «/». Мне интересно, что я делаю не так...


person samuel    schedule 31.03.2017    source источник
comment
Почему вы изобретаете велосипед? Существует функция symlink() для программного создания символических ссылок, и ее преимущество заключается в том, что она не зависит извне от деталей файловой системы.   -  person John Bollinger    schedule 01.04.2017
comment
Привет, Джон, я делаю это в образовательных целях и понимаю, как символическая ссылка создается в фоновом режиме.   -  person samuel    schedule 01.04.2017


Ответы (1)


(Очень) поздний ответ, но только потому, что данные символической ссылки находятся в указателях блоков, это не означает, что размер файла равен 0! Вам нужно установить поле i_size в индексе символической ссылки, равное длине пути

person Marco Cutecchia    schedule 19.05.2021