linux

Linux中copendir与其他目录遍历函数的比较

小樊
37
2025-09-07 10:14:28
栏目: 编程语言

在Linux中,有多种函数可用于遍历目录

  1. opendir() 和 readdir(): opendir() 函数用于打开一个目录流,返回一个指向 DIR 结构的指针。readdir() 函数用于读取目录流中的条目。这两个函数通常与 closedir() 一起使用,以关闭目录流。

示例代码:

#include <dirent.h>
#include <stdio.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;
}
  1. scandir() 和 alphasort(): scandir() 函数用于读取目录内容并返回一个包含目录条目的数组。alphasort() 是一个比较函数,用于对 scandir() 返回的数组进行排序。

示例代码:

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

int compare(const void *a, const void *b) {
    return alphasort(a, b);
}

int main() {
    struct dirent **namelist;
    int n;

    n = scandir(".", &namelist, NULL, compare);
    if (n < 0) {
        perror("scandir");
        return 1;
    }

    for (int i = 0; i < n; i++) {
        printf("%s\n", namelist[i]->d_name);
        free(namelist[i]);
    }
    free(namelist);
    return 0;
}
  1. glob() 和 globfree(): glob() 函数用于匹配符合指定模式的文件名,并将结果存储在一个字符串数组中。globfree() 函数用于释放 glob() 分配的内存。

示例代码:

#include <glob.h>
#include <stdio.h>

int main() {
    glob_t globbuf;
    int ret;

    ret = glob("*", GLOB_TILDE, NULL, &globbuf);
    if (ret != 0) {
        fprintf(stderr, "glob error: %d\n", ret);
        return 1;
    }

    for (size_t i = 0; i < globbuf.gl_pathc; i++) {
        printf("%s\n", globbuf.gl_pathv[i]);
    }

    globfree(&globbuf);
    return 0;
}

比较:

根据实际需求和场景选择合适的目录遍历函数。

0
看了该问题的人还看了