我正在开发一个非基于磁盘的虚拟文件系统,有点像/ proc。现在我想在其中创建一个符号链接到ext3文件系统上的目标。我还没有找到任何关于如何实现这一目标的标准文档。到目前为止我猜到的是我必须在symlink
中编写一个函数来放入struct inode_operations
。但坦率地说,即使使用功能参数,我也会感到茫然。
如果重要,我开始使用LWN上的本教程:http://lwn.net/Articles/13325/
编辑:我正在使用libfs,而不是FUSE答案 0 :(得分:3)
据推测,你正在使用fuse,如果不是,请执行:)
你所要做的就是实现getattr函数告诉内核该对象是一个符号链接,然后实现readlink函数并返回链接应该链接到的路径;内核将完成剩下的工作。
答案 1 :(得分:2)
我终于完成了它。这是我做的(一些细节可能会有所不同,具体取决于文件系统想要实现的目标):
使用S_IFLNK模式创建符号链接的inode,并将目标添加到i_private字段。
实施follow_link,因为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
答案 2 :(得分:1)
我建议看看linux / fs / ext2 /源代码。文件symlink.c,inode.c,namei.c以及其他可能很少的文件。您将了解需要完成的工作。与预期相反,单个文件系统的文件系统代码实际上非常短且易于阅读。
但也许不是创建新的虚拟文件系统,你可能会问自己另一个问题,在我的情况下,不会融合用户级文件系统吗?他们有更好的文档来创建虚拟文件系统和更多示例。