室外团队拓展游戏:linux字符设备驱动设计3个重要的struct

来源:百度文库 编辑:中财网 时间:2024/05/09 12:47:02

struct file_operations  

2009-10-17 19:41:27|  分类: linux |  标签: |字号大中小 订阅

struct--file_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.