dentry结构体相关信息:
struct ext2_dir_entry_2 { __u32 inode; /* 文件的inode号 */ __u16 rec_len; /* 目录项长度 */ __u8 name_len; /* 文件名包含的字符数 */ __u8 file_type; /* 文件类型 */ char name[EXT2_NAME_LEN]; /* 文件名 */ };
rec_len代表当前目录项的长度
name_len代表的是文件名的长度
file_type代表文件的文件类型,有以下几种:
enum { EXT2_FT_UNKNOWN, /*未知*/ EXT2_FT_REG_FILE, /*常规文件*/ EXT2_FT_DIR, /*目录文件*/ EXT2_FT_CHRDEV, /*字符设备文件*/ EXT2_FT_BLKDEV, /*块设备文件*/ EXT2_FT_FIFO, /*命名管道文件*/ EXT2_FT_SOCK, /*套接字文件*/ EXT2_FT_SYMLINK, /*符号连文件*/ EXT2_FT_MAX /*文件类型的最大个数*/ };
inode结构体详细信息:
struct ext2_inode { __u16 i_mode; /* 文件的权限 */ __u16 i_uid; /* 文件所有者ID */ __u32 i_size; /* 文件字节数大小 */ __u32 i_atime; /* 文件上次被访问的时间 */ __u32 i_ctime; /* 文件创建时间 */ __u32 i_mtime; /* 文件被修改的时间 */ __u32 i_dtime; /* 文件被删除的时间 */ __u16 i_gid; /* 文件所属组ID */ __u16 i_links_count; /* 此文件的inode被连接的次数 */ __u32 i_blocks; /* Blocks count */ __u32 i_flags; /* File flags */ union { struct { __u32 l_i_reserved1; } linux1; struct { __u32 h_i_translator; } hurd1; struct { __u32 m_i_reserved1; } masix1; } osd1; /* OS dependent 1 */ __u32 i_block[EXT2_N_BLOCKS];/* 指向存储文件数据的块的数组 */ __u32 i_generation; /* File version (for NFS) */ __u32 i_file_acl; /* File ACL */ __u32 i_dir_acl; /* Directory ACL */ __u32 i_faddr; /* Fragment address */ union { struct { __u8 l_i_frag; /* Fragment number */ __u8 l_i_fsize; /* Fragment size */ __u16 i_pad1; __u16 l_i_uid_high; /* these 2 fields */ __u16 l_i_gid_high; /* were reserved2[0] */ __u32 l_i_reserved2; } linux2; struct { __u8 h_i_frag; /* Fragment number */ __u8 h_i_fsize; /* Fragment size */ __u16 h_i_mode_high; __u16 h_i_uid_high; __u16 h_i_gid_high; __u32 h_i_author; } hurd2; struct { __u8 m_i_frag; /* Fragment number */ __u8 m_i_fsize; /* Fragment size */ __u16 m_pad1; __u32 m_i_reserved2[2]; } masix2; } osd2; /* OS dependent 2 */ };

图1-文件索引过程
文章来源: dentry结构体和inode结构体