在虚拟文件系统中实现符号链接
我正在使用不是基于磁盘的虚拟文件系统,有点像/ proc。现在我想在其中创建一个符号链接到ext3文件系统上的目标。我还没有找到任何有关如何实现这一目标的标准文档。到目前为止我所猜测的是,我必须编写一个函数来输入symlink
的struct inode_operations
。但坦率地说,即使使用了函数参数,我仍然不知所措。在虚拟文件系统中实现符号链接
如果它的事项,我开始了与本教程LWN:http://lwn.net/Articles/13325/
编辑:我与libfs工作,不FUSE此刻
我终于完成了。下面是我做的(一些细节可能会因文件系统需要什么来实现不同):
创建具有S_IFLNK模式的符号链接的索引节点和目标添加到i_private领域。
因为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
我建议看一看Linux的/ fs/ext2 /源代码。文件symlink.c,inode.c,namei.c和其他可能的文件。你会得到一些关于需要做什么的想法。与预期相反,单个文件系统的文件系统代码实际上非常短并且易于阅读。
但也许不是创建新的虚拟文件系统,你可能会问自己另一个问题,在我的情况下,不会融合用户级文件系统?他们有更好的文档来创建虚拟文件系统和其他几个例子。
感谢您的建议。我一定会在ext2源代码中寻找关于实现的一些想法。 – user108127 2009-12-28 23:52:48
我实际上使用libfs创建虚拟文件系统中已经存在的内核模块上工作的实施follow_link。我知道如果我使用FUSE会更容易,但现在这是不可能的:) – user108127 2009-12-28 23:51:25