【问题标题】:how to create a symbolic link in EXT2 file system如何在 EXT2 文件系统中创建符号链接
【发布时间】: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


【解决方案1】:

一个(非常)迟到的响应,但仅仅因为符号链接的数据在块指针中并不意味着文件大小为 0!您需要将符号链接的 inode 中的 i_size 字段设置为等于路径的长度

【讨论】:

    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2015-07-07
    相关资源
    最近更新 更多