温馨提示×

Linux readdir与glob函数比较

小樊
53
2025-09-03 14:16:27
栏目: 智能运维

readdirglob 是在 Linux 系统中用于文件和目录操作的两个不同的函数。它们各自有不同的用途和工作方式。

readdir

readdir 是一个 POSIX 标准的库函数,用于读取目录的内容。它通常与 opendirclosedir 一起使用,来遍历一个目录中的所有条目。

  • 函数原型:

    #include <dirent.h>
    
    DIR *opendir(const char *name);
    struct dirent *readdir(DIR *dirp);
    int closedir(DIR *dirp);
    
  • 工作方式:

    • 使用 opendir 打开一个目录流。
    • 调用 readdir 来获取目录中的下一个条目。
    • 每个 readdir 调用返回一个指向 struct dirent 的指针,该结构包含有关目录项的信息(如名称、inode 号等)。
    • 当没有更多的目录项时,readdir 返回 NULL
    • 使用 closedir 关闭目录流。
  • 特点:

    • readdir 提供的是实时的目录内容视图。
    • 它逐个返回目录项,而不是一次性返回所有匹配的文件名。

glob

glob 是一个用于文件名模式匹配的函数,根据指定的模式返回匹配的文件名列表。

  • 函数原型:

    #include <glob.h>
    
    int glob(const char *pattern, int flags, int (*errfunc)(const char *epath, int errno), glob_t *p);
    void globfree(glob_t *p);
    
  • 工作方式:

    • 调用 glob 函数并传入一个模式字符串(例如 *.txt)。
    • glob 函数会搜索符合模式的文件,并将结果存储在 glob_t 结构中。
    • 返回值表示成功或失败的状态。
    • 使用 globfree 释放 glob_t 结构占用的内存。
  • 特点:

    • glob 一次性返回所有匹配的文件名列表。
    • 支持通配符和模式匹配,例如 *?
    • 适合需要获取符合特定模式的文件列表的场景。

总结

  • 如果你需要逐个访问目录中的条目,readdir 是合适的选择。
  • 如果你需要基于模式匹配获取一组文件名,glob 更为方便。

这两个函数适用于不同的场景,选择哪个取决于具体的需求。

0