如何对inode结构执行mmap操作
2024-10-31 18:10:36
struct inode, struct dentry, struct file
- struct file是对打开文件的抽象,每个进程都有一个fd table,一个fd对应一个struct file
- struct dentry是对文件系统里一个路径的抽象,即一个逻辑文件。(目录是一种特殊的文件)
- struct inode是对磁盘里一个文件的抽象,即一个物理文件。
- 多个struct file可以指向同一个struct dentry,即一个文件被多次打开。
- 多个struct dentry可以指向同一个struct inode,即文件系统中有不同路径链接到同一个物理文件。
如何对一个struct inode执行mmap操作
- kernel里执行mmap操作的API是vm_mmap,vm_mmap操作的对象是struct file。
- 获得一个struct file的API是filp_open,filp_open接受的是一个path。
- 每一个path都对应一个struct dentry,一个struct inode对应多个struct dentry。
以下代码,仅考虑映射struct inode对应的文件(如果需要指定路径,则需要多一个遍历过程):
1 | struct file *d_open_inode(struct inode *inode) |