如何在Unix中将目录读取为文件?

时间:2009-11-02 01:43:51

标签: unix inode dir

据我所知,目录只是unix中的一个文件,其中包含inode编号和文件名。我该如何看待这个?我不能在目录上使用cat或更少,在vi中打开它只会显示文件列表...没有inode编号。

3 个答案:

答案 0 :(得分:8)

由于这是一个编程问题(编程问题,不是吗?),你应该查看opendirreaddir和{{1 }} 功能。这些是Single UNIX Spec。

的一部分
closedir

#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 联机帮助页,请参阅here - 其中包含指向其他联系人的链接。

请记住,存储在目录条目中的文件的信息量很少。 inode本身包含从readdir函数获得的东西,包括时间,大小,所有者,权限等,以及指向实际文件内容的所有重要指针。

答案 1 :(得分:6)

在过去 - 版本7,系统III,早期的System V - 您确实可以打开一个目录并将内容读入内存,特别是对于具有2字节inode编号和14字节限制的旧Unix文件系统在文件名上。

随着更多异域文件系统的普及,必须使用opendir(),readdir(),closedir()系列函数调用,因为解析目录的内容变得越来越重要。

最后,在过去十年左右的时间里,它已经达到了大多数系统的地步,你无法读取目录;你可以打开它(主要是因为fchdir()这样的操作可以工作),你可以使用opendir()系列调用来读它。

答案 2 :(得分:1)

看起来stat command可能正常。来自文章:

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