当前位置: 技术问答>linux和unix
请问LINUX驱动中的struct file *file是什么意思?
来源: 互联网 发布时间:2016-05-06
本文导语: 库里函数如下: ioctl(fd,motor_move,&ioctl_data) 对应的驱动函数如下: ioctl(struct inode *inode,struct file *file,unsigned int command,long arg) 为何上面是3个参数,而下面驱动成了4个参数?怎么使用? | 在...
库里函数如下:
ioctl(fd,motor_move,&ioctl_data)
对应的驱动函数如下:
ioctl(struct inode *inode,struct file *file,unsigned int command,long arg)
为何上面是3个参数,而下面驱动成了4个参数?怎么使用?
ioctl(fd,motor_move,&ioctl_data)
对应的驱动函数如下:
ioctl(struct inode *inode,struct file *file,unsigned int command,long arg)
为何上面是3个参数,而下面驱动成了4个参数?怎么使用?
|
在用户空间,我们知道 文件描述符来表示一个打开的文件。
而在内核空间,来表示文件(或者说对文件操作的)是几个重要的数据结构:
superblock
inode
file
dentry
这四个对象
分别是四个数据机构
struct super_block
struct inode
struct file
struct dentry
详细可以阅读Understanding the Linux Kernel 3rd -- 12.2. VFS Data Structures
而在内核空间,来表示文件(或者说对文件操作的)是几个重要的数据结构:
superblock
inode
file
dentry
这四个对象
分别是四个数据机构
struct super_block
struct inode
struct file
struct dentry
详细可以阅读Understanding the Linux Kernel 3rd -- 12.2. VFS Data Structures
|
这个几个结构体很简单,第一看没看明白很晕也正常
file表示的是打开的文件,因为一个文件可以多次打开,这个东西代表的是打开了的文件
inode表示的是物理上的文件,这个文件是唯一的,就算是被多次打开,这个东西也是唯一的
fileopteration这个是文件操作符,对应于你在应用程序中传进来的函数方法对应到你内核中的方法
比如你应用程序的open方法,在这个结构体下面定义 open:kernelOpen()就是调用的这个方法,具体写法2.4和2.6不同
大概就是这些结构体了
file表示的是打开的文件,因为一个文件可以多次打开,这个东西代表的是打开了的文件
inode表示的是物理上的文件,这个文件是唯一的,就算是被多次打开,这个东西也是唯一的
fileopteration这个是文件操作符,对应于你在应用程序中传进来的函数方法对应到你内核中的方法
比如你应用程序的open方法,在这个结构体下面定义 open:kernelOpen()就是调用的这个方法,具体写法2.4和2.6不同
大概就是这些结构体了
|
楼主注意作用域,虽然名称一样,但其实是两个函数,作用域不一样的.
|
一个用户空间的,一个内核的。驱动里面的函数要看内核定义的那个ioctl函数才对