热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux驱动程序设计——file_operations

structfile_operations是一个字符设备把驱动的操作和设备号联系在一起的纽带,是一系列指针的集合,每个被打开的文件都对应于一系列的操作&
   struct file_operations是一个字符设备把驱动的操作和设备号联系在一起的纽带,是一系列指针的集合,每个被打开的文件都对应于一系列的操作,这就是file_operations,用来执行一系列的系统调用。




linux-2.6.22/include/linux/fs.h


struct file_operations {


        struct module *owner;    //防止模块还在被使用的时候被卸载


        loff_t        (*llseek) ();


        ssize_t       (*read) ();


        ssize_t       (*write) ();


        ssize_t       (*aio_read) ();


        ssize_t       (*aio_write) ();


        int           (*readdir) ();


        unsigned int (*poll) ();


        int           (*ioctl) ();


        long          (*unlocked_ioctl) ();


        long          (*compat_ioctl) ();


        int           (*mmap) ();


        int           (*open) ();


        int           (*flush) ();


        int           (*release) ();


        int           (*fsync) ();


        int           (*aio_fsync) ();


        int           (*fasync) ();


        int           (*lock) ();


        ssize_t       (*sendfile) ();


        ssize_t       (*sendpage) ();


        unsigned long (*get_unmapped_area) ();


        int           (*check_flags) ();


        int           (*dir_notify) ();


        int           (*flock) ();


        ssize_t       (*splice_write) ();


        ssize_t       (*splice_read) ();


};






struct--
file


-----------------------------------------


    struct file代表一个打开的文件,在执行file_operation中的open操作时被创建,这里需要注意的是与用户空间file指针的区别,一个在内核,而file指针在用户空间,由c库来定义。




linux-2.6.22/include/linux/fs.h


struct file {


        union {


                struct list_head        fu_list;


                struct rcu_head         fu_rcuhead;


        } f_u;


        struct path                     f_path;


#define f_dentry                        f_path.dentry


#define f_vfsmnt                        f_path.mnt


        const struct file_operations    *f_op;


        atomic_t                        f_count;


        unsigned int                    f_flags;


        mode_t                          f_mode;    //文件是否可读、可写


        loff_t                          f_pos;     //当前读写位置


        struct fown_struct              f_owner;


        unsigned int                    f_uid, f_gid;


        struct file_ra_state            f_ra;


        unsigned long                   f_version;


        void                            *f_security;


        void                            *private_data;


        struct list_head                f_ep_links;


        spinlock_t                      f_ep_lock;


        struct address_space            *f_mapping;


};






struct 
inode
被内核用来代表一个文件,注意和struct file的区别,struct inode一个是代表文件,struct file一个是代表打开的文件


struct inode包括很重要的二个成员:


dev_t       i_rdev   设备文件的设备号


struct cdev *i_cdev 代表字符设备的数据结构




struct inode结构是用来在内核内部表示文件的.同一个文件可以被打开好多次,所以可以对应很多struct file,但是只对应一个struct inode.

推荐阅读
author-avatar
坐看末日之景L_170
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有