在C中读取目录文件

时间:2012-03-02 17:03:45

标签: c linux unix filesystems

我正在尝试编写一个小程序来向我展示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。

为什么这不起作用,我怎样才能阅读内部表示?

谢谢!

2 个答案:

答案 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的所有信息(文件/目录/等)。