【发布时间】:2017-08-26 06:22:00
【问题描述】:
我正在使用 EXT2 文件系统,过去 2 天试图弄清楚如何创建符号链接。来自http://www.nongnu.org/ext2-doc/ext2.html#DEF-SYMBOLIC-LINKS,“对于所有长度小于 60 字节的符号链接,数据存储在 inode 本身中;它使用通常用于存储指向数据块的指针的字段。这是值得优化的,因为我们避免为符号链接分配一个完整的块,并且大多数符号链接的长度小于 60 个字符”
为了在 /link1 上创建一个到 /source 的符号链接,我创建了一个新的 inode 并说它的索引为 24。由于它的长度小于 60 个字符,我将字符串“/source”从 i_block[0] 字段开始放置(所以在 gdb 中打印 new_inode->i_block[0] 显示“/dir2/source”)并将 i_links_count 设置为 1,i_size 和 i_blocks 设置为 0。然后我在 inode 2(根 inode)处创建了一个目录条目,属性为 24,“ link1",文件类型为 EXT2_FT_SYMLINK。
创建了一个名为“link1”的链接,但它是一个目录,当我单击它时,它会转到“/”。我想知道我做错了什么......
【问题讨论】:
-
为什么要重新发明轮子?有一个
symlink()函数用于以编程方式创建符号链接,它的优点是不依赖于外部文件系统细节。 -
嗨,John,我这样做是为了教育目的,并了解符号链接是如何在后台创建的。
标签: c linux filesystems ext2