我知道目录只是 unix 中的一个文件,其中包含文件的 inode 编号和名称。我怎么看这个?我不能在目录上使用 cat 或 less,在 vi 中打开它只会显示文件列表……没有 inode 编号。
问问题
2823 次
3 回答
8
由于这是一个编程问题(它是一个编程问题,不是吗?),您应该检查opendir
,readdir
和closedir
函数。这些是 Single UNIX Spec 的一部分。
#include <sys/types.h>
#include <dirent.h>
DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);
该dirent.h
文件应具有您需要的结构,至少包含:
char d_name[] name of entry
ino_t d_ino file serial number
有关手册页,请参见此处readdir
- 它包含指向其他人的链接。
请记住,存储在其目录条目中的文件信息量很少。inode 本身包含您从stat
函数中获得的内容,例如时间、大小、所有者、权限等,以及指向实际文件内容的最重要的指针。
于 2009-11-02T01:59:35.163 回答
6
在过去——版本 7、System III、早期 System V——你确实可以打开一个目录并将内容读入内存,尤其是对于具有 2 字节 inode 编号和文件上限制为 14 字节的旧 Unix 文件系统姓名。
随着更奇特的文件系统变得越来越流行,不得不使用 opendir()、readdir()、closedir() 系列函数调用,因为解析目录的内容变得越来越不平凡。
最后,在过去十年左右的时间里,它已经达到了在大多数系统上无法读取目录的地步;您可以打开它(主要是这样 fchdir() 之类的操作可以工作),并且您可以使用 opendir() 系列调用来读取它。
于 2009-11-02T02:05:06.680 回答
1
看起来stat
命令可能是有序的。来自文章:
stat /etc/passwd
File: `/etc/passwd'
Size: 2911 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 324438 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-08-11 05:24:17.000000000 -0400
Modify: 2008-08-03 05:11:05.000000000 -0400
Change: 2008-08-03 05:11:05.000000000 -0400
于 2009-11-02T01:46:36.550 回答