在C语言中读取目录文件

3

我正在尝试编写一个小程序来显示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(如预期),但对读取操作的调用返回-1。
为什么它不起作用,我该如何读取内部表示?
谢谢!

我相信你的代码(或其等效版本)可能很久以前就能工作了(也许是在1980年代或1970年代),以一种特定于实现的方式。 - Basile Starynkevitch
2个回答

7
处理目录需要使用opendir/readdir/closedir。请参阅相关的man pages获取更多信息。
要检查文件名是否对应于目录,您需要先为文件名调用stat并检查它是否是目录(S_ISDIR(myStatStruc.st_mode))。

@Basile Starynkevitch:没错,但它不具备可移植性。相比之下,我引用的函数是在POSIX中的。 - DarkDust

2

目录是文件系统特定的表示形式,是文件系统的一部分。在extfs上,它们是字符串/索引节点对的表格,不像文件有数据块(用您上面的代码读取)。

要在C中读取特定于目录的信息,您需要使用dirent.h。请查看此页面以获取更多信息 http://pubs.opengroup.org/onlinepubs/7908799/xsh/dirent.h.html

在POSIX系统上,系统调用“stat”将为您提供有关文件系统(文件/目录等)上索引节点的所有信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接