inode结构体

inode分为内存中的inode和文件系统中的inode,为了避免混淆,我们称前者为VFS inode, 而后者以EXT2为代表,我们称为Ext2 inod。这里说明的是VFS inode。

重要成员:

1. struct cdev *i_cdev;

若是字符设备,为其对应的cdev结构体指针。

2. struct block_device *i_bdev;

若是块设备,为其对应的block_device结构体指针

3. dev_t i_rdev;

若是设备文件,此成员记录设备的设备号

 1 struct inode {
 2     /* RCU path lookup touches following: */
 3     umode_t            i_mode;
 4     uid_t            i_uid;
 5     gid_t            i_gid;
 6     const struct inode_operations    *i_op;
 7     struct super_block    *i_sb;
 8
 9     spinlock_t        i_lock;    /* i_blocks, i_bytes, maybe i_size */
10     unsigned int        i_flags;
11     unsigned long        i_state;
12 #ifdef CONFIG_SECURITY
13     void            *i_security;
14 #endif
15     struct mutex        i_mutex;
16
17
18     unsigned long        dirtied_when;    /* jiffies of first dirtying */
19
20     struct hlist_node    i_hash;
21     struct list_head    i_wb_list;    /* backing dev IO list */
22     struct list_head    i_lru;        /* inode LRU list */
23     struct list_head    i_sb_list;
24     union {
25         struct list_head    i_dentry;
26         struct rcu_head        i_rcu;
27     };
28     unsigned long        i_ino;
29     atomic_t        i_count;
30     unsigned int        i_nlink;
31     dev_t            i_rdev;
32     unsigned int        i_blkbits;
33     u64            i_version;
34     loff_t            i_size;
35 #ifdef __NEED_I_SIZE_ORDERED
36     seqcount_t        i_size_seqcount;
37 #endif
38     struct timespec        i_atime;
39     struct timespec        i_mtime;
40     struct timespec        i_ctime;
41     blkcnt_t        i_blocks;
42     unsigned short          i_bytes;
43     struct rw_semaphore    i_alloc_sem;
44     const struct file_operations    *i_fop;    /* former ->i_op->default_file_ops */
45     struct file_lock    *i_flock;
46     struct address_space    *i_mapping;
47     struct address_space    i_data;
48 #ifdef CONFIG_QUOTA
49     struct dquot        *i_dquot[MAXQUOTAS];
50 #endif
51     struct list_head    i_devices;
52     union {
53         struct pipe_inode_info    *i_pipe;
54         struct block_device    *i_bdev;
55         struct cdev        *i_cdev;
56     };
57
58     __u32            i_generation;
59
60 #ifdef CONFIG_FSNOTIFY
61     __u32            i_fsnotify_mask; /* all events this inode cares about */
62     struct hlist_head    i_fsnotify_marks;
63 #endif
64
65 #ifdef CONFIG_IMA
66     atomic_t        i_readcount; /* struct files open RO */
67 #endif
68     atomic_t        i_writecount;
69 #ifdef CONFIG_FS_POSIX_ACL
70     struct posix_acl    *i_acl;
71     struct posix_acl    *i_default_acl;
72 #endif
73     void            *i_private; /* fs or device private pointer */
74 };
时间: 2024-08-10 19:05:07

inode结构体的相关文章

inode结构体及软链接和硬链接

首先先了解一下block(块的概念),块是文件存取的最小单位,通常8个扇区为一个块,而每个扇区的大小为512个字节也就是0.5K,所以一个块的大小也就是8*0.5K=4K. 系统通过inode来识别文件 可以用命令stat查看某文件的inode信息,如:stat client.c 可看到除了文件名以外的文件信息都在inode中 因此,inode是保存文件的信息的,称为索引节点 命令: stat 文件名     //查看某个文件的inode信息 df -i         //查看硬盘分区的ino

3. file、inode结构体及chardevs数组等相关知识解析

https://blog.csdn.net/zqixiao_09/article/details/50850004 下图描述了Linux中虚拟文件系统,一般的设备文件与设备驱动程序间的函数调用关系 上图展现了一个应用程序调用字符设备驱动的过程,在设备驱动程序的设计中,一般而言,会关系file和inode这两个结构体. 用户空间使用open()函数打开一个字符设备fd = open("/dev/hello", o_READ);这一函数会调用两个数据结构struct inode{}&

Linux字符设备中的两个重要结构体(file、inode)

对于Linux系统中,一般字符设备和驱动之间的函数调用关系如下图所示 上图描述了用户空间应用程序通过系统调用来调用程序的过程.一般而言在驱动程序的设计中,会关系 struct file 和 struct inode 这两个结构体. 用户空间使用open()系统调用函数打开一个字符设备时( int fd = open("dev/demo", O_RDWR) )大致有以下过程: 在虚拟文件系统VFS中的查找对应与字符设备对应 struct inode节点 遍历字符设备列表(chardevs

struct socket结构体详解

在内核中为什么要有struct socket结构体呢?    struct socket结构体的作用是什么?    下面这个图,我觉得可以回答以上两个问题.      由这个图可知,内核中的进程可以通过使用struct socket结构体来访问linux内核中的网络系统中的传输层.网络层.数据链路层.也可以说struct socket是内核中的进程与内核中的网路系统的桥梁.   struct socket {      socket_state  state; // socket state  

文件系统及其相关结构体

fd指向打开的文件描述符列表,开始的时候指向fd_array,当大小超过max_fds时,重新分配地址 file结构体代表一个打开的文件 f_op其中包含着与文件关联的操作 进程内核栈与进程描述符之间的关系 task_struct结构体注释详解可参考http://www.educity.cn/linux/518072.html dentry的中文名称是目录项,是Linux文件系统中某个索引节点(inode)的链接.这个索引节点可以是文件,也可以是目录. struct dentry {      

FILE 结构体的定义,inode ,软链接和硬链接的理解

一.FILE结构体: C将每个文件简单地作为顺序字节流.每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件的关系. 在开始执行程序的时候,将自动打开3个文件和相关的流:标准输入流.标准输出流和标准错误.流提供了文件和程序的通信通道.例如,标准输入流使得程序可以从键盘读取数据,而标准输出流使得程序可以在屏幕上输出数据.打开一个文件将返回指向FILE结构(在stdio.h中定义)的指针,它包含用于处理文件的信息,也就

Linux下DIR,dirent,stat等结构体详解

摘要: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自<UNIX环境高级编程(第二版)>).函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎

Linux--struct file结构体

struct file(file结构体): struct file结构体定义在include/linux/fs.h中定义.文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file. 它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数.在文件的所有实例都关闭后,内核释放这个数据结构.在内核创建和驱动源码中, struct file的指针通常被命名为file或filp.其有两个非常重要的字段:文件描述符和缓冲区.  文件描述符fd: fd只是一个

[转] 结构体file_operations

原文地址: http://www.cnblogs.com/sunyubo/archive/2010/12/22/2282079.html 结构体file_operations在头文件 linux/fs.h中定义,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针.该结构体的每个域都对应着驱动内核模块用来处理某个被请求的 事务的函数的地址. 举个例子,每个字符设备需要定义一个用来读取设备数据的函数.结构体 file_operations中存储着内核模块中执行这项操作的函数的地址.一下是该结构