zoukankan      html  css  js  c++  java
  • struct--file_operations

    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.

  • 相关阅读:
    软件部门每年耗资大约100亿到200多亿美元,但没有研发出任何具有说服力的产品,因此华为决定关闭
    Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good
    linux 下用find命令查找文件,rm命令删除文件
    北电之死:谁谋杀了华为的对手?——银湖资本(Silver Lake)董事总经理爱德华·詹德出任CEO,既不了解华为,也不重视中国,直截了当地否决了收购华为
    搞定JavaScript正则表达式
    Orleans3.0
    CSS盒模型
    作用域和闭包
    NServiceBus是.Net平台下的开源的消息服务框架
    [1]System.Reflection.Emit
  • 原文地址:https://www.cnblogs.com/sidely/p/struct-FileOperations.html
Copyright © 2011-2022 走看看