0

我在自定义内核模块中创建了几个dentry对象。securityfs这是我的做法:

inst->output_file = securityfs_create_file("1",
                               S_IRUSR | S_IRGRP, uprp_dir, NULL,
                               &my_file_ops);
inst->output_file = securityfs_create_file("2",
                               S_IRUSR | S_IRGRP, uprp_dir, NULL,
                               &my_file_ops);
// and so on 

我已经为my_file_ops. 然而,问题是所有 dentry对象都调用了以下函数:

 static int ct_open(struct inode *inode, struct file *file)

然后继续使用:

 static void *my_seq_ops_start (struct seq_file *m, loff_t *pos)

问题是,我如何确定用户想要读取的 dentry 对象(在这些函数中的任何一个中)?- 意思是我想为文件12.

4

1 回答 1

1

当 VFSct_open()通过结构调用您的函数时my_file_ops,它会将打开的文件以.struct inode *struct file *. struct file包含一个成员f_dentry,它是一个指向由 . 返回的目录的指针securityfs_create_file()struct dentry包含文件名。

然而,更简洁的是,第四个参数securityfs_create_file()是供您使用的。您可以将任何指针传递给您想要的任何内部结构,并在打开操作期间从 inode.i_private 指针检索它。这通常是“正确”的抽象级别,因此您的文件操作不需要知道有关文件名的任何信息。

于 2013-05-06T16:27:50.907 回答