1

我知道目录只是 unix 中的一个文件,其中包含文件的 inode 编号和名称。我怎么看这个?我不能在目录上使用 cat 或 less,在 vi 中打开它只会显示文件列表……没有 inode 编号。

4

3 回答 3

8

由于这是一个编程问题(它一个编程问题,不是吗?),您应该检查opendir,readdirclosedir函数。这些是 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 回答