6

I'm working on a virtual file system which isn't disk based, kind of like /proc. Now I want to create a symlink within it to a target on a ext3 file system. I haven't found any standard documentation on ways to achieve this. What I've guessed so far is that I have to write a function to put in for symlink in struct inode_operations. But frankly I'm at a loss even with the function parameters.

If it matters, I started off with this tutorial on LWN: http://lwn.net/Articles/13325/

EDIT: I'm working with libfs, not FUSE at the moment

4

3 回答 3

3

大概你正在使用fuse,如果你不是,做:)

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

于 2009-12-28T20:52:12.683 回答
2

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

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

  2. 实现 follow_link 因为 generic_readlink 要求它存在

static void *sample_follow_link (struct dentry *dentry, struct nameidata *nd)
{
    nd->深度= 0;
    nd_set_link(nd, (char *)dentry->d_inode->i_private);
    返回空值;
}

静态结构 inode_operations sample_inode_ops = {
    .readlink = generic_readlink,
    .follow_link = sample_follow_link,
};

......
//在dentry和inode创建函数中
inode->i_op = sample_inode_ops

于 2010-01-02T18:38:20.637 回答
1

我建议看一下 linux/fs/ext2/ 源代码。文件 symlink.c、inode.c、namei.c 和其他一些文件。您将对需要做什么有所了解。与预期相反,各个文件系统的文件系统代码实际上非常短且易于阅读。

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

于 2009-12-28T18:21:27.060 回答