kernel部分数据结构列表三(inode)

kernel部分数据结构列表三(inode)

/*
*索引节点对象由inode结构体表示,定义文件在linux/fs.h中
*/

struct inode {
        struct hlist_node       i_hash;              /* 哈希表 */
        struct list_head        i_list;              /* 索引节点链表 */
        struct list_head        i_dentry;            /* 目录项链表 */
        unsigned long           i_ino;               /* 节点号 */
        atomic_t                i_count;             /* 引用记数 */
        umode_t                 i_mode;              /* 访问权限控制 */
        unsigned int            i_nlink;             /* 硬链接数 */
        uid_t                   i_uid;               /* 使用者id */
        gid_t                   i_gid;               /* 使用者id组 */
        kdev_t                  i_rdev;              /* 实设备标识符 */
        loff_t                  i_size;              /* 以字节为单位的文件大小 */
        struct timespec         i_atime;             /* 最后访问时间 */
        struct timespec         i_mtime;             /* 最后修改(modify)时间 */
        struct timespec         i_ctime;             /* 最后改变(change)时间 */
        unsigned int            i_blkbits;           /* 以位为单位的块大小 */
        unsigned long           i_blksize;           /* 以字节为单位的块大小 */
        unsigned long           i_version;           /* 版本号 */
        unsigned long           i_blocks;            /* 文件的块数 */
        unsigned short          i_bytes;             /* 使用的字节数 */
        spinlock_t              i_lock;              /* 自旋锁 */
        struct rw_semaphore     i_alloc_sem;         /* 索引节点信号量 */
        struct inode_operations *i_op;               /* 索引节点操作表 */
        struct file_operations  *i_fop;              /* 默认的索引节点操作 */
        struct super_block      *i_sb;               /* 相关的超级块 */
        struct file_lock        *i_flock;            /* 文件锁链表 */
        struct address_space    *i_mapping;          /* 相关的地址映射 */
        struct address_space    i_data;              /* 设备地址映射 */
        struct dquot            *i_dquot[MAXQUOTAS]; /* 节点的磁盘限额 */
        struct list_head        i_devices;           /* 块设备链表 */
        struct pipe_inode_info  *i_pipe;             /* 管道信息 */
        struct block_device     *i_bdev;             /* 块设备驱动 */
        unsigned long           i_dnotify_mask;      /* 目录通知掩码 */
        struct dnotify_struct   *i_dnotify;          /* 目录通知 */
        unsigned long           i_state;             /* 状态标志 */
        unsigned long           dirtied_when;        /* 首次修改时间 */
        unsigned int            i_flags;             /* 文件系统标志 */
        unsigned char           i_sock;              /* 可能是个套接字吧 */
        atomic_t                i_writecount;        /* 写者记数 */
        void                    *i_security;         /* 安全模块 */
        __u32                   i_generation;        /* 索引节点版本号 */
        union {
                void            *generic_ip;         /* 文件特殊信息 */
        } u;
};


/*
*索引节点的操作inode_operations定义在linux/fs.h中
*/

struct inode_operations {
        int (*create) (struct inode *, struct dentry *,int);
        /*VFS通过系统调用create()和open()来调用该函数,从而为dentry对象创建一个新的索引节点。在创建时使用mode制定初始模式*/
        struct dentry * (*lookup) (struct inode *, struct dentry *);
        /*该韩式在特定目录中寻找索引节点,该索引节点要对应于dentry中给出的文件名*/
        int (*link) (struct dentry *, struct inode *, struct dentry *);
        /*该函数被系统调用link()电泳,用来创建硬连接。硬链接名称由dentry参数指定,连接对象是dir目录中ld_dentry目录想所代表的文件*/
        int (*unlink) (struct inode *, struct dentry *);
        /*该函数被系统调用unlink()调用,从目录dir中删除由目录项dentry制动的索引节点对象*/
        int (*symlink) (struct inode *, struct dentry *, const char *);
        /*该函数被系统电泳symlik()调用,创建符号连接,该符号连接名称由symname指定,连接对象是dir目录中的dentry目录项*/
        int (*mkdir) (struct inode *, struct dentry *, int);
        /*该函数被mkdir()调用,创建一个新鲁姆。创建时使用mode制定的初始模式*/
        int (*rmdir) (struct inode *, struct dentry *);
        /*该函数被系统调用rmdir()调用,删除dir目录中的dentry目录项代表的文件*/
        int (*mknod) (struct inode *, struct dentry *, int, dev_t);
        /*该函数被系统调用mknod()调用,创建特殊文件(设备文件、命名管道或套接字)。要创建的文件放在dir目录中,其目录项问dentry,关联的设备为rdev,初始权限由mode指定*/
        int (*rename) (struct inode *, struct dentry *,
                       struct inode *, struct dentry *);
        /*VFS调用该函数来移动文件。文件源路径在old_dir目录中,源文件由old_dentry目录项所指定,目标路径在new_dir目录中,目标文件由new_dentry指定*/
        int (*readlink) (struct dentry *, char *, int);
        /*该函数被系统调用readlink()调用,拷贝数据到特定的缓冲buffer中。拷贝的数据来自dentry指定的符号链接,最大拷贝大小可达到buflen字节*/
        int (*follow_link) (struct dentry *, struct nameidata *);
        /*该函数由VFS调用,从一个符号连接查找他指向的索引节点,由dentry指向的连接被解析*/
        int (*put_link) (struct dentry *, struct nameidata *);
        /*在follow_link()调用之后,该函数由vfs调用进行清楚工作*/
        void (*truncate) (struct inode *);
        /*该函数由VFS调用,修改文件的大小,在调用之前,索引节点的i_size项必须被设置成预期的大小*/
        int (*permission) (struct inode *, int);
        /*该函数用来检查给低昂的inode所代表的文件是否允许特定的访问模式,如果允许特定的访问模式,返回0,否则返回负值的错误码。多数文件系统都将此区域设置为null,使用VFS提供的通用方法进行检查,这种检查操作仅仅比较索引及诶但对象中的访问模式位是否和mask一致,比较复杂的系统,比如支持访问控制链(ACL)的文件系统,需要使用特殊的permission()方法*/
        int (*setattr) (struct dentry *, struct iattr *);
        /*该函数被notify_change调用,在修改索引节点之后,通知发生了改变事件*/
        int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
        /*在通知索引节点需要从磁盘中更新时,VFS会调用该函数*/
        int (*setxattr) (struct dentry *, const char *,
                         const void *, size_t, int);
        /*该函数由VFS调用,向dentry指定的文件设置扩展属性,属性名为name,值为value*/
        ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
        /*该函数被VFS调用,向value中拷贝给定文件的扩展属性name对应的数值*/
        ssize_t (*listxattr) (struct dentry *, char *, size_t);
        /*该函数将特定文件所有属性别表拷贝到一个缓冲列表中*/
        int (*removexattr) (struct dentry *, const char *);
        /*该函数从给定文件中删除指定的属性*/
};

posted on 2011-06-24 08:53 Neddy11 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Neddy/archive/2011/06/24/2088605.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓逆向_12 --- jeb工具的使用 ( 动态调试 smali 代码 【 普通调试 和 debug调试 】)

From:https://www.52pojie.cn/forum.php?modviewthread&tid742250 jeb 动态调试 smali 代码:https://www.bilibili.com/video/BV1UE411A7rW?p39 使用 JEB 调试 Android App:https://www.jianshu.com/p/a1a7cf687cd2 了解 JEB 和 IDA 使…

Hamcrest总结--思维导图

来源:https://blog.csdn.net/neven7/article/details/42489723 思维导图:https://www.processon.com/view/link/5da81f53e4b09df55016b55d

机器学习应用的未来是什么?微型化

作者 | Pete Warden编译 | 专知翻译 | Yongxi, Huaiwen数据科学家,Jetpac 公司CTO Pete Warden发表了一篇博文,详细阐述了微型化是机器学习应用的一条出路,并且相信机器学习可以在微小的、低功耗的芯片上运行,利用深度学习可以做到…

使用flot绘图出现window.G_vmlCanvasManager is null or not an Object

使用flot绘图出现window.G_vmlCanvasManager is null or not an Object导致ie无法绘图在firefox上不会报错解决办法是在加载jquery.flot.js之前先加载excanvas.js转载于:https://www.cnblogs.com/JerryWang1991/archive/2011/07/06/3936395.html

Python 爬虫 性能 相关( asyncio 模块 --- 高性能爬虫 )

From:https://www.cnblogs.com/bravexz/p/7741633.html 爬虫应用 asyncio 模块 ( 高性能爬虫 ):https://www.cnblogs.com/morgana/p/8495555.html python异步编程之asyncio(百万并发):https://www.cnblogs.com/shenh…

“反机器学习”:人工智能突破的关键是“遗忘”

来源:36Kr摘要:人工智能越来越频繁地出现在人们的生活中,而其技术上的重大进步仍然不曾明朗。本文作者Natalie Fratto在“Machine Un-Learning: Why Forgetting Might Be the Key to AI”一文中讲述了实现人工智能战略性遗忘的三个方法。让我…

反编译资料收集

JDP 一个非常好用的Java反编译工具:官方描述“The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.”。 官方网址:http://java.decompiler.free.fr/ &…

Java 内部类 和 匿名内部类

From:https://www.cnblogs.com/geeksongs/p/9836154.html 一,内部类 其实内部类是十分简单的,我们根据其字里行间的意义就可以知道内部类应该是一个类当中的一个类,相当于一个类进行了嵌套,就如同循环的嵌套一般。 内…

打造一个宇宙 星系模拟产生对宇宙进化惊人见解

图片来源:TNG COLLABORATION来源:中国科学报摘要:研究人员不断发展宇宙模型,并借此发现新的宇宙理论。美国加州理工学院理论物理学家Philip Hopkins喜欢跟他的同事恶作剧。作为模拟星系形成的专家,Hopkins有时会在演讲…

Scrapy 性能

参考:https://blog.csdn.net/s150503/article/details/72571680 CONCURRENT_REQUESTS 与 DOWNLOAD_DELAY Scrapy 中 CONCURRENT_REQUESTS 与 DOWNLOAD_DELAY 的联系,先建立一个项目来找CONCURRENT_REQUESTS与DOWNLOAD_DELAY的联系 以豆瓣电影top250 为例…

在CentOS6虚拟机上安装VirtualBox增强功能

1. 安装编译需要的库和头文件yum install gcc -yyum install kernel sources -yyum install kernel-devel -y2. 安装VirtualBox增强功能3. 重新启动系统转载于:https://www.cnblogs.com/wdpp/archive/2011/07/13/2386255.html

5G 发展报告:以四项技术为基础,广泛应用还需十年

来源:36Kr摘要:近年来,在5G领域的竞争非常激烈。但5G的部署与应用到底是一个什么样的过程?人们到底需要多久才能普遍用上5G技术?日前,CB Insights发表了一篇报告,在对无线技术的背景进行研究的基…

33个优秀的 jQuery 图片展示插件分享

这篇文章收集了33个优秀的 jQuery 图片插件分享给大家。jQuery 是一个非常优秀的 JavaScript 框架,使用简单灵活,同时还有许多成熟的插件可供选择,其中最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入一…

安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置

教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html From:Android Studio 3.6 调试 smali:https://blog.csdn.net/jha334201553/article/details/104494732 From:SmalideaIntelliJ IDEA/…

IEEE协会首次在京举办研讨会,王飞跃称不存在AI芯片

本文来源:网易智能摘要:6月9日至10日,IEEE SMC学会(IEEE System,Man,and Cybernetics Society)与中国自动化学会、中国科学院自动化研究所、青岛智能产业技术研究院共同在京举办IEEE人工智能与控…

Lucene提供的条件判断查询[转]

Lucene提供的条件判断查询[转] 第一、 按词条搜索 - TermQuery query new TermQuery(new Term("name","word1")); hits searcher.search(query); 这样就可以把 field 为 name 的所有包含 word1 的文档检索出来了。 第二、 “与或”搜索…

安卓逆向_14 --- 单机和弱联网游戏内购 突破口 和 思路

From:https://www.bilibili.com/video/BV1UE411A7rW?p41 Android 逆向资源收集( apk ):https://blog.csdn.net/qq_36869808/article/details/79290420 Android逆向-Android基础逆向7(内购干货集合)&#…

OpenAI最新研究:如何通过无监督学习提升「自然语言理解能力」?

来源:amazonaws.com摘要:长期以来,使用无监督(预)训练来提高区别性任务的性能表现一直是机器学习研究的一个重要目标。最近,OpenAI通过使用一个具有可扩展性的任务不可知系统,在一系列不同的自然…

安卓逆向_15( 一 ) --- JNI 和 NDK

From:较详细的介绍JNI:https://blog.csdn.net/lizhifa2011/article/details/21021177 From:https://www.jb51.net/article/126111.htm NDK 官方文档:https://developer.android.google.cn/training/articles/perf-jni JNI / NDK …

Nature:科学家成功绘制出大脑神经细胞“地图”

图片来源:Thomas Hainmller, Marlene Bartos来源:生物谷摘要:最近,一项刊登在国际杂志Nature上的研究报告中,来自弗莱堡大学的科学家们通过研究开发出了一种新型模型来解释大脑如何储存一些“有形事件”(ta…