gpt4 book ai didi

linux - 为什么 VFS 函数同时获得结构 inode 和文件?

转载 作者:太空狗 更新时间:2023-10-29 12:14:55 26 4
gpt4 key购买 nike

看起来 struct file 包含一个 struct inode *,但两者都被传递给了 VFS 函数。为什么不简单地单独传递 struct file * 呢?

例如int (*open) (struct inode *, struct file *);

最佳答案

简短回答:出于历史原因

他们开始从 Linux 2.1 中的 file_operations 参数中删除 struct inode* —— 即看看 2.1.60 提交:

http://repo.or.cz/w/davej-history.git/blobdiff/1018aab0cbe3c20a69685bfa5d217d3535067686..be6cc637f086b24887a11bd4bcc7445220c9b0ff:/include/linux/fs.h

@@ -533,9 +534,9 @@ struct super_block {
typedef int (*filldir_t)(void *, const char *, int, off_t, ino_t);

struct file_operations {
- long long (*llseek) (struct file *, long long, int);
- long (*read) (struct inode *, struct file *, char *, unsigned long);
- long (*write) (struct inode *, struct file *, const char *, unsigned long);
+ loff_t (*llseek) (struct file *, loff_t, int);
+ ssize_t (*read) (struct file *, char *, size_t, loff_t *);
+ ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, poll_table *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);

我不知道他们为什么不为 (*open)() 这样做 - 可能是因为在我们打开文件时,初始化 struct file* 未完成。

在现代内核中,do_dentry_open() 在调用 (*open)() 之前执行此操作,因此这是基本功能。

关于linux - 为什么 VFS 函数同时获得结构 inode 和文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com