温馨提示×

Linux readdir与opendir的关系

小樊
49
2025-08-30 14:23:42
栏目: 智能运维

opendir()readdir() 是在 Linux 系统中用于读取目录内容的两个函数,它们之间的关系是协同工作的。

  1. opendir():这个函数用于打开一个目录流,返回一个指向 DIR 结构的指针。DIR 结构包含了目录流的相关信息。当你想要读取一个目录的内容时,首先需要调用 opendir() 函数。如果成功,它会返回一个非空的 DIR 指针;如果失败,则返回 NULL。

函数原型:

#include <dirent.h>
DIR *opendir(const char *name);
  1. readdir():这个函数用于从已打开的目录流中读取一个目录项。每次调用 readdir() 函数,它都会返回一个指向 dirent 结构的指针,该结构包含了目录项的信息(如文件名、文件类型等)。当没有更多的目录项可读时,readdir() 函数将返回 NULL。

函数原型:

#include <dirent.h>
struct dirent *readdir(DIR *dirp);

使用这两个函数的典型步骤如下:

  1. 调用 opendir() 函数打开目录,获取一个 DIR 指针。
  2. 使用循环调用 readdir() 函数,读取目录中的每个条目。
  3. 对每个目录项执行所需的操作(例如,打印文件名)。
  4. readdir() 返回 NULL 时,表示已到达目录末尾,关闭目录流。
  5. 调用 closedir() 函数关闭目录流。

示例代码:

#include <stdio.h>
#include <dirent.h>

int main() {
    DIR *dir;
    struct dirent *entry;

    dir = opendir(".");
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

    while ((entry = readdir(dir)) != NULL) {
        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return 0;
}

这个示例程序会列出当前目录下的所有文件和子目录。

0