在虚拟文件系统中实现符号链接

时间:2009-12-27 19:56:08

标签: linux symlink vfs

我正在开发一个非基于磁盘的虚拟文件系统,有点像/ proc。现在我想在其中创建一个符号链接到ext3文件系统上的目标。我还没有找到任何关于如何实现这一目标的标准文档。到目前为止我猜到的是我必须在symlink中编写一个函数来放入struct inode_operations。但坦率地说,即使使用功能参数,我也会感到茫然。

如果重要,我开始使用LWN上的本教程:http://lwn.net/Articles/13325/

编辑:我正在使用libfs,而不是FUSE

3 个答案:

答案 0 :(得分:3)

据推测,你正在使用fuse,如果不是,请执行:)

你所要做的就是实现getattr函数告诉内核该对象是一个符号链接,然后实现readlink函数并返回链接应该链接到的路径;内核将完成剩下的工作。

答案 1 :(得分:2)

我终于完成了它。这是我做的(一些细节可能会有所不同,具体取决于文件系统想要实现的目标):

  1. 使用S_IFLNK模式创建符号链接的inode,并将目标添加到i_private字段。

  2. 实施follow_link,因为generic_readlink要求它出现

  3. static void *sample_follow_link (struct dentry *dentry, struct nameidata *nd)
    {
        nd->depth = 0;
        nd_set_link(nd, (char *)dentry->d_inode->i_private);
        return NULL;
    }
    
    static struct inode_operations sample_inode_ops = {
        .readlink = generic_readlink,
        .follow_link = sample_follow_link,
    };
    
    .....
    //in the function for the dentry and inode creation 
    inode->i_op = sample_inode_ops
    
    

答案 2 :(得分:1)

我建议看看linux / fs / ext2 /源代码。文件symlink.c,inode.c,namei.c以及其他可能很少的文件。您将了解需要完成的工作。与预期相反,单个文件系统的文件系统代码实际上非常短且易于阅读。

但也许不是创建新的虚拟文件系统,你可能会问自己另一个问题,在我的情况下,不会融合用户级文件系统吗?他们有更好的文档来创建虚拟文件系统和更多示例。