我正在尝试编写一个小程序来向我展示linux中目录的内部表示(特别是debian)。这个想法是一个使用open(“。”,O_RDONLY)的小型C程序,但这似乎没有输出。该计划如下:
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char** argv)
{
int fd = open(argv[1],O_RDONLY,0 );
char buf;
printf("%i\n",fd);
while(read(fd, &buf, 1) > 0)
printf("%x ", buf);
putchar('\n');
}
当我在常规文件上运行它时,它按预期工作,但在诸如“。”的目录上,它没有输出。 fd的值为3(如预期的那样),但对read的调用返回-1。
为什么这不起作用,我怎样才能阅读内部表示?
谢谢!
答案 0 :(得分:7)
要处理目录,您需要使用opendir
/ readdir
/ closedir
。阅读相应的手册页以获取更多信息。
要检查文件名是否与目录相对应,首先需要调用stat
作为文件名并检查它是否是目录(S_ISDIR(myStatStruc.st_mode)
)。
答案 1 :(得分:2)
目录是特定于文件系统的表示,是文件系统的一部分。在extfs上,它们是字符串/ inode对的表,与具有数据块的文件(使用上面的代码读取的文件)不同。
要在C中读取特定于目录的信息,您需要使用dirent.h。 查看此页面以获取更多信息 http://pubs.opengroup.org/onlinepubs/7908799/xsh/dirent.h.html
在POSIX系统上,系统调用“stat”将为您提供有关文件系统上的inode的所有信息(文件/目录/等)。