Я работаю с файловой системой 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» создается, но это каталог, и когда я нажимаю на нее, она переходит в «/». Мне интересно, что я делаю не так...
symlink()
для программного создания символических ссылок, и ее преимущество заключается в том, что она не зависит извне от деталей файловой системы. - person John Bollinger   schedule 01.04.2017