使用dentry inode创建的文件与打开的系统调用inode之间的关系?

时间:2015-07-10 14:27:59

标签: linux file linux-kernel linux-device-driver

我正在使用以下代码在debugfs内创建一个简单的/sys/kernel/debug/test/testFile文件:

pDebugfs = debugfs_create_dir(name, NULL);

if (!pDebugfs)
            goto fail;          

if (!debugfs_create_file("testFile", MODE_T, pDebugfs,
        NULL,  &debugfs_fops)) {
    goto fail;
}

现在,当我写入此文件时,将调用具有以下定义的open方法:

static ssize_t debugfs_open(struct inode *inode, struct file *filp)

现在pDebugfs类型dentry的指针指向inode d_inode定义here

我的问题是这个inode指针和open中调用的指针之间的关系是什么?它们有关系吗?如果有,怎么样?我尝试在i_flags两个定义中打印i_node值,但它们不匹配,我在i_flags中指定init并在{{{}}中检查其值1}}但他们不匹配。

1 个答案:

答案 0 :(得分:1)

在您的代码中,您有两个dentry。一个在/sys/kernel/debug/

中创建目录的人
pDebugfs = debugfs_create_dir(name, NULL);

并且,你没有存储它,但它存在,创建你open(2)文件的那个:

pDebugfs_file = debugfs_create_file("testFile", MODE_T, pDebugfs, NULL,  &debugfs_fops)

您在inode中看到的debugfs_open是与该文件关联的{{1}} 而不是目录。