据我所知,目录只是unix中的一个文件,其中包含inode编号和文件名。我该如何看待这个?我不能在目录上使用cat或更少,在vi中打开它只会显示文件列表...没有inode编号。
答案 0 :(得分:8)
由于这是一个编程问题(是编程问题,不是吗?),你应该查看opendir
,readdir
和{{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