file_operations结构下函数详解.docx.pdf

上传人:tbuqq 文档编号:5616004 上传时间:2020-07-02 格式:PDF 页数:7 大小:132.44KB
返回 下载 相关 举报
file_operations结构下函数详解.docx.pdf_第1页
第1页 / 共7页
file_operations结构下函数详解.docx.pdf_第2页
第2页 / 共7页
file_operations结构下函数详解.docx.pdf_第3页
第3页 / 共7页
file_operations结构下函数详解.docx.pdf_第4页
第4页 / 共7页
file_operations结构下函数详解.docx.pdf_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《file_operations结构下函数详解.docx.pdf》由会员分享,可在线阅读,更多相关《file_operations结构下函数详解.docx.pdf(7页珍藏版)》请在三一文库上搜索。

1、file_operations 结构下函数详解 struct file_operations struct module *owner; / 指向拥有该结构的模块的指针,避免正在操作时被卸载,一般为初始化为 THIS.MODULES loff_t (*llseek) (struct file loff_t, int); / llseek 用来修改文件当前的读写位置,返冋新位置 / loff_t 为一个”长偏移量”。当此函数指针为空,seek调用将会以不可预期的 方式修改 file 结构中的位置计数器。 ssize_t (* read) (struct file *, char _user *,

2、 size_t, loffLt *); 从设备中同步读取数据。读取成功返冋读取的字节数。设置为NULL, 调用 时返回 -EINVAL 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 *) ; / 向设备发送数据。 ssize_t ( *aio_write) (struct kiocb const ch

3、ar _user *, size_t, loff_t); / 初始化一个异步的写入操作。 int (*readdir) (struct file *, void *, filldir_t); / 仅用于读取 H 录,对于设备文件,该字段为NULL unsigned int (*poll) (struct file *, struct poll_table_struct *); / 返回一 ?个位掩码,用来指出非阻塞的读取或写入是否可能。 / 将 pool 定义为 NULL, 设备会被认为即可读也可写。 int (*ioctl) (struct inode *, struct file *, u

4、nsigned int, unsigned long); / 提供一种执行设备特殊命令的方法。不设置入口点,返回-ENOTTY long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long) ; / 不使用 BLK 的文件系统,将使用此种函数指针代替ioctl long (*compat_ioctl) (stmct file *, unsigned int, unsigned long); 在 64 位系统上, 32位的 ioctl 调用,将使用此函数指针代替 int (*mmap) (struct file *, str

5、uct vm_area_struct *) ; / 用于请求将设备内存映射到进程地址空间。如果无此方法,将访问? ENODEVo int (*open) (struct inode *, struct file *); / 如果为空,设备的打开操作永远成功,但系统不会通知驱动程序 / 由 VFS 调用,当 VFS 打开一个文件,即建立了一个新的Struct file“,之后 调 用 open方法分配文件结构。 open属 J* struct inode_operations。 int (*flush) (struct file *) ; 发生在进程关闭设备文件描述符副本,执行并等待,若设置为N

6、ULL, 内核 将忽略用户应用程序的请求。 int (release) (stmct inode *, struct file * ) ; / file 结构释放时,将调用此指针函数release与 open相同可设置为 NULL int (*fsync) (struct file *, struct dentry *, int datasync) ; 刷新待处理的数据,如果驱动程序没有实现,fsync 调用将返回 -EINVAL int ( *aio_fsync) (struct kiocb *, int datasync); 异步 fsync int (*fasync) (int, str

7、uct file *, int); 通知设备 FASYNC 标志发生变化,如果设备不支持异步通知,该字段 可以为 NULL int (*lock) (struct file *, int, struct file_lock *); 实现文件锁,设备驱动常不去实现此lock ssize_t (* readv ) (struct file *, const struct iovec *, unsigned long, loff_t *); ssize_t (*writev) (struct file *, const struct iovec unsigned long, loff_t *): /

8、readv llwritev 分散/ 聚集型的读写操作,实现进行涉及多个内存区域的 单次读或写操作。 ssize_t (*sendfile) (struct file lofO *, size_t, read_actor_t, void *); / 实现 sendfile 调用的读取部分,将数据从一个文件描述符移到另一个, 设备驱动通常将萇设置为NULL ssize_t (sendpage) (struct file *, struct page int, size_t, loff_t *, int); 实现 sendfile 调用的另一部分,内核调用将其数据发送到对应文件,每 次一个数据页,

9、设备驱动通常将其设置为NULL unsigned long (*get_unmapped_area) (struct file *, unsigned long, unsigned long, unsigned long, unsigned long); / 在进程地址空间找到一个合适的位置,以便将底层设备屮的内存段映 射到该位置。大部分驱动可将其设置为NULL int (*check_flags) (int); / 允许模块检查传递给fcnll (F_SETEL.) 调用的标志 int (*dir_notify) (struct file *filp, unsigned long arg); 应用程序使用fcntl 来请求目录改变通知时,调用该方法。仅对文件系 统有效,驱动程序不必实现。 int (*flock) / 实现文件锁 ; (struct file *, int, struct file_lock *);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1