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

Vla*_*ala 1 unix inode dir

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

pax*_*blo 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);
Run Code Online (Sandbox Code Playgroud)

dirent.h文件应该具有您需要的结构,至少包含:

char   d_name[]    name of entry
ino_t  d_ino       file serial number
Run Code Online (Sandbox Code Playgroud)

请参阅此处readdir联机帮助页 - 它包含指向其他人的链接.

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


Jon*_*ler 6

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

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

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