inode结构体

Posted 天地有大美而不言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 };

 

以上是关于inode结构体的主要内容,如果未能解决你的问题,请参考以下文章

文件系统

Linux文件类型

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

struct inode 和 struct file

文件IO详解---文件描述符(fd)和inode号的关系