2009-12-27 52 views
6

我正在使用不是基于磁盘的虚拟文件系统,有点像/ proc。现在我想在其中创建一个符号链接到ext3文件系统上的目标。我还没有找到任何有关如何实现这一目标的标准文档。到目前为止我所猜测的是,我必须编写一个函数来输入symlinkstruct inode_operations。但坦率地说,即使使用了函数参数,我仍然不知所措。在虚拟文件系统中实现符号链接

如果它的事项,我开始了与本教程LWN:http://lwn.net/Articles/13325/

编辑:我与libfs工作,不FUSE此刻

+0

我实际上使用libfs创建虚拟文件系统中已经存在的内核模块上工作的实施follow_link。我知道如果我使用FUSE会更容易,但现在这是不可能的:) – user108127 2009-12-28 23:51:25

回答

2

我终于完成了。下面是我做的(一些细节可能会因文件系统需要什么来实现不同):

  1. 创建具有S_IFLNK模式的符号链接的索引节点和目标添加到i_private领域。

  2. 因为generic_readlink要求它存在

 
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 

1

我建议看一看Linux的/ fs/ext2 /源代码。文件symlink.c,inode.c,namei.c和其他可能的文件。你会得到一些关于需要做什么的想法。与预期相反,单个文件系统的文件系统代码实际上非常短并且易于阅读。

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

+0

感谢您的建议。我一定会在ext2源代码中寻找关于实现的一些想法。 – user108127 2009-12-28 23:52:48

3

想必你使用fuse,如果你不是,做:)

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