我知道目录只是unix中的一个文件,其中包含inode编号和文件名.我该如何看待这个?我不能在目录上使用cat或更少,并在vi中打开它只显示文件列表...没有inode编号.
由于这是一个编程问题(这是一个编程问题,不是吗?),你应该看看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);
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函数中获取的东西,诸如时间,大小,所有者,权限等等,以及指向实际文件内容的所有重要指针.
在过去 - 版本7,系统III,早期的System V - 您确实可以打开一个目录并将内容读入内存,尤其是对于具有2字节inode编号且文件上限制为14个字节的旧Unix文件系统名称.
随着更多异域文件系统变得越来越普遍,必须使用opendir(),readdir(),closedir()系列函数调用,因为解析目录的内容变得越来越不重要.
最后,在过去十年左右的时间里,它已经达到了大多数系统的地步,你无法读取目录; 你可以打开它(主要是因为fchdir()之类的操作可以工作),你可以使用opendir()系列调用来读取它.