微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

从核心空间configurationLED触发器的参数

skbuff frags和frag_list之间的区别

在Linux中,内存映射是什么types的文件

在module_exit()周围使用`#ifdef MODULE`的目的?

在每次系统调用时都会插入kprobes

简短的回答: 由于历史原因 。

他们开始从Linux 2.1中的file_operations参数中删除struct inode* ,即看一下2.1.60 commit:

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 *,unsigned long); + loff_t (*llseek) (struct file *,loff_t,int); + ssize_t (*read) (struct file *,size_t,loff_t *); + ssize_t (*write) (struct file *,loff_t *); int (*readdir) (struct file *,void *,filldir_t); unsigned int (*poll) (struct file *,poll_table *); int (*ioctl) (struct inode *,unsigned int,unsigned long);

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

在现代的内核中, do_dentry_open()调用(*open)()之前就是这样做的,所以它是基本的特性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐