Hello! 欢迎来到小浪云!


Linux readdir返回值含义解析


avatar
小浪云 2025-03-17 33

readdir() 是一个在 c 语言中用于读取目录内容的函数,它的原型定义在 头文件中。当你调用 readdir() 函数时,它会返回一个指向 struct dirent 结构的指针,该结构包含了关于目录中的一个条目的信息。

如果成功,readdir() 返回一个指向 Struct dirent 的指针;如果到达目录流的末尾,则返回 NULL。如果在读取过程中发生错误,则返回 NULL,并设置全局变量 errno 来指示错误类型。

struct dirent 结构通常包含以下成员:

  • d_ino: 目录项的 inode 号。
  • d_off: 目录项在目录文件中的偏移量。
  • d_reclen: d_name 字段的字节长度。
  • d_name: 指向目录项名称的以 null 结尾的字符数组。

d_name 字段是目录项的名字,它是 readdir() 返回的结构中唯一保证有效的字段。如果目录项没有名字(例如,. 或 ..),则 d_name 为空字符串

下面是一个简单的例子,展示了如何使用 readdir() 函数来遍历一个目录中的所有条目:

#<span>include <stdio.h></span> #<span>include <stdlib.h></span> #<span>include <dirent.h></span> #<span>include <errno.h></span>  int main(<span>int argc, char *argv[])</span> {     DIR *dir;     <span>struct dirent *entry;</span>      if (argc != 2) {         fprintf(stderr, "Usage: %s <directory> ", argv[0]);         return EXIT_FAILURE;     }      dir = opendir(argv[1]);     if (dir == NULL) {         perror("opendir");         return EXIT_FAILURE;     }      while ((entry = readdir(dir)) != NULL) {         printf("%s ", entry->d_name);     }      if (closedir(dir) == -1) {         perror("closedir");         return EXIT_FAILURE;     }      return EXIT_SUCCESS; } 

在这个例子中,程序接受一个命令行参数作为要读取的目录名。它使用 opendir() 打开目录,然后循环调用 readdir() 来获取每个目录项。对于每个目录项,它打印出 d_name 字段的值,即目录项的名字。最后,它使用 closedir() 关闭目录流。如果在任何时候发生错误,程序会打印出错误信息并返回非零值。

相关阅读