Linux 目录索引节点与常规文件索引节点
我可以查看linux内核inode结构中的哪些值来判断我当前查看的inode是用于目录还是常规文件 我已经搜索了inode,但似乎找不到一个看起来像是我想要的成员,因为我使用的是较旧的内核版本,我将发布下面的结构(2.6.24)Linux 目录索引节点与常规文件索引节点,linux,kernel,inode,Linux,Kernel,Inode,我可以查看linux内核inode结构中的哪些值来判断我当前查看的inode是用于目录还是常规文件 我已经搜索了inode,但似乎找不到一个看起来像是我想要的成员,因为我使用的是较旧的内核版本,我将发布下面的结构(2.6.24) 任何帮助都将不胜感激。我相信这是inode的模式 umode_t i_mode; 要访问该字段,请参见统计(2)手册页: The following POSIX macros are defined to check the file ty
任何帮助都将不胜感激。我相信这是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.)
下面是来自的一些示例代码:
@user1131467我不确定,我一直认为文件的所有内容都存储在inode中,除了名称和数据。所以我希望能够从inode中分辨出来。是否需要一些位掩码,然后使用I_模式获取类型?@NiklasB:stat允许用户访问inode信息。我相信它是用相同的宏访问的。@NiklasB。我想他们是说,使用带有struct inode的
I_mode
成员的宏可以告诉我inode是文件还是目录。谢谢,这非常有用。@NiklasB我实际上看到的是从linux内核中切下的内存,因此,我无法真正使用这些宏来确定inode是用于常规文件还是目录。但它指出了这些宏的定义位置,因此现在我可以使用从某个函数中的内存解析的数据执行位掩码,以查找inode的类型。
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.)
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