2012-03-31 99 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