如何在 Linux 内核中从 `struct inode *` 打开和读取文件
How to open and read file from `struct inode *` in Linux kernel
我想检查来自 Linux 内核 v3.0.8 的文件的内容,只知道 struct inode *
。我只需要读取这个 inode 指向的文件的开头,然后关闭并 return。我不关心 filename/mountpoint 等附加信息。事实上,该文件可能没有名称(如已删除但仍打开)。可能吗?
我终于做到了:
- 这是需要的。
struct path root;
struct file *filerd;
- 获取 init 任务 fs root。
task_lock(&init_task);
get_fs_root(init_task.fs, &root);
task_unlock(&init_task);
- 更改此文件的目录:
root.dentry = d_find_alias(inode);
- 打开文件:
filerd = file_open_root(root.dentry->d_parent, root.mnt,
root.dentry->d_name.name, O_RDONLY);
它适用于我测试的每个进程和不同的挂载点,这让我很惊讶。
我想检查来自 Linux 内核 v3.0.8 的文件的内容,只知道 struct inode *
。我只需要读取这个 inode 指向的文件的开头,然后关闭并 return。我不关心 filename/mountpoint 等附加信息。事实上,该文件可能没有名称(如已删除但仍打开)。可能吗?
我终于做到了:
- 这是需要的。
struct path root;
struct file *filerd;
- 获取 init 任务 fs root。
task_lock(&init_task);
get_fs_root(init_task.fs, &root);
task_unlock(&init_task);
- 更改此文件的目录:
root.dentry = d_find_alias(inode);
- 打开文件:
filerd = file_open_root(root.dentry->d_parent, root.mnt,
root.dentry->d_name.name, O_RDONLY);
它适用于我测试的每个进程和不同的挂载点,这让我很惊讶。