2012-03-31 102 views
1

我可以查看linux内核的inode结构中的哪些值来判断目前我正在查看的inode是针对目录还是普通文件?目录Inode vs普通文件Inode

我已经通过inode搜索,但似乎无法找到一个成员看起来像它有我想要的,因为我使用的是旧的内核版本,我会发布下面的结构(2.6.24)

struct inode 
    { 
    struct hlist_node i_hash; 
    struct list_head i_list; 
    struct list_head i_sb_list; 
    struct list_head i_dentry; 
    unsigned long  i_ino; 
    atomic_t   i_count; 
    unsigned int  i_nlink; 
    uid_t    i_uid; 
    gid_t    i_gid; 
    dev_t    i_rdev; 
    unsigned long  i_version; 
    loff_t    i_size; 
    struct timespec i_atime; 
    struct timespec i_mtime; 
    struct timespec i_ctime; 
    unsigned int  i_blkbits; 
    blkcnt_t   i_blocks; 
    unsigned short  i_bytes; 
    umode_t   i_mode; 
    spinlock_t   i_lock; 
    struct mutex  i_mutex; 
    struct rw_semaphore    i_alloc_sem; 
    const struct inode_operations *i_op; 
    const 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 list_head     i_devices; 

    union { 
       struct pipe_inode_info *i_pipe; 
       struct block_device *i_bdev; 
       struct cdev   *i_cdev; 
      }; 

    int   i_cindex; 
    __u32   i_generation; 
    unsigned long i_state; 
    unsigned long dirtied_when; 
    unsigned int i_flags; 
    atomic_t  i_writecount; 
    void   *i_private; 
    }; 

任何帮助,将不胜感激。

+0

@ user1131467我不确定,我一直认为永远关于文件的东西存储在inode中,除了名称和数据。所以我期待能够从inode中看出来。 – 2012-03-31 21:58:30

回答

3

我相信它的inode的模式...

umode_t   i_mode; 

要访问现场看到统计(2)手册页:

The following POSIX macros are defined to check the file type using the st_mode field: 

     S_ISREG(m) is it a regular file? 

     S_ISDIR(m) directory? 

     S_ISCHR(m) character device? 

     S_ISBLK(m) block device? 

     S_ISFIFO(m) FIFO (named pipe)? 

     S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.) 

     S_ISSOCK(m) socket? (Not in POSIX.1-1996.) 

下面是从一些示例代码Linux driver for minix FS

434 void minix_set_inode(struct inode *inode, dev_t rdev) 
435 { 
436   if (S_ISREG(inode->i_mode)) { 
437     inode->i_op = &minix_file_inode_operations; 
438     inode->i_fop = &minix_file_operations; 
439     inode->i_mapping->a_ops = &minix_aops; 
440   } else if (S_ISDIR(inode->i_mode)) { 
441     inode->i_op = &minix_dir_inode_operations; 
442     inode->i_fop = &minix_dir_operations; 
443     inode->i_mapping->a_ops = &minix_aops; 
444   } else if (S_ISLNK(inode->i_mode)) { 
445     inode->i_op = &minix_symlink_inode_operations; 
446     inode->i_mapping->a_ops = &minix_aops; 
447   } else 
448     init_special_inode(inode, inode->i_mode, rdev); 
449 } 
450 
+0

是否有一些我需要的位掩码并用i_mode来获取类型呢? – 2012-03-31 21:59:21

+0

@NiklasB:stat给用户区访问inode信息。我相信它使用相同的宏访问。 – 2012-03-31 22:03:31

+0

@NiklasB。我认为他们说使用这些宏与struct inode的'i_mode'成员会告诉我一个inode是否是一个文件或目录。 – 2012-03-31 22:03:33