file_operatons 方法清单

struct module *owner

        第一个file_operations字段并不是一个操作;相反,它是指向"拥有"该结构的模块的指针。内核使用这个字段以避免在模块的操作正在被使用时卸载该模块。几乎都会被初始化为THIS_MODULE,定义在<linux/module.h>的宏

loff_t (*llseek)(struct file *,loff_t int);

        方法llseek用来修改文件的当前读写位置,并将新位置作为(正的)返回值返回。参数loff_t一个"长偏移量",即使在32位平台上页至少占用64位的数据宽度,出错时返回一个负的返回值。如果这个函数指针是NULL,对seek的调用将会以某种不可预期的方式修改file结构中的位置计数器。

ssize_t (*read)(struct file *,char __user *,size_t,loff_t *);

        用来从设备上读取数据。该函数指针被赋为NULL时,将导致read系统调用出错并返回-EINVAL(invalid argument).函数返回非负值表示成功读取的字节数(目标台上固有数据类型)

ssize_t (*aio_read)(struct kiocb *,char __user *,size_t,loff_t);

        初始化一个异步的读取操作,即在函数返回之前可能不会完成的读取操作。如果该方法为NULL,所有的操作将通过read处理。

ssize_t(*write)(struct file *,const char __user *,size_t,loff_t *);

        向设备发送数据。如果没有这个函数,write系统调用会向程序返回一个-EINVAL.如果返回值非负,则表示成功写入的字节数。

ssize_t(*aio_write)(struct kiocb *,const char __user *,size_t,loff_t *);

        初始化设备上的异步写入操作。

int (*readdir) (struct file *,void *,filldir_t);

        对于设备文件来说,这个字段应该为NULL。它仅用于读取目录,只对文件系统有用。

unsigned int (*poll ) (struct file *,struct poll_table_struct *)

        poll方法是poll,epoll和 select这三个系统调用的后端实现。这三个系统调用可用来查询某个或多个文件描述符上的读取或写入是否会被阻塞。poll方法应该返回一个位掩码,用来指出非阻塞的读取或写入是否可能,并且也会想内核提供将调用进程置于休眠状态知道I/O变为可能的信息。如果驱动程序将poll方法定义为NULL,则设备会认为既可读也可写,并且不会被阻塞。

int (*ioctl)(struct inode *,struct file *,unsigned int,unsigned long);

        系统调用ioctl提供了一种执行设别特定命令的方法(如格式化软盘的某个磁道,这既不是读操作也不是写操作)。另外,内核还能识别一部分ioctl命令,而不必强调用fops表中的iocl.如果设备不提供ioctl入口点,则对于任何内核未预先定义的请求,ioctl系统调用将返回错误。

int (*mmap)(struct file *,struct vm_area_struct *);

        mmap用于请求将设备内存映射到进程地址空间。如果设备没有实现这个方法,那么mmap系统调用将返回-ENODEV

int (*open)(struct inode *,struct file *)

        尽管这是种是对设备文件执行的第一个操作,然而却并不要求驱动程序一定要声明一个相应的方法。如果这个入口为NULL,设备的打开操作永远成功,但系统不会通知驱动程序。

int (*flush)(struct file *)

        对flush操作的调用发生在进程关闭设备文件描述符副本的时候,它应该执行(并等待)设备上尚未完结的操作。请不要将它同用户程序使用的fsync操作相混淆。目前,flush仅仅用于少数几个驱动程序,比如,SCSI磁带驱动程序用它来确保设备被关闭之前所有的数据都被写入到磁带中。如果flush设置为空,内核将简单的忽略用户应用程序的请求。

int (*release)(struct inode *,struct file *);

        当file结构被释放时,将调用这个操作。与open相仿,也可以将release设置为NULL.

 

 

 

 

 

你可能感兴趣的:(file_operatons 方法清单)