在 Linux 中,glob
函数和 opendir
都可以用于文件名模式匹配和遍历目录。glob
函数是基于 shell 模式匹配的,而 opendir
则是通过目录流的方式实现。如果你想用 glob
函数替代 opendir
,可以通过以下步骤实现:
#include <glob.h>
#include <stdio.h>
#include <stdlib.h>
glob
函数进行模式匹配:glob_t glob_result;
int ret = glob("/path/to/search/*.txt", GLOB_TILDE, NULL, &glob_result);
if (ret != 0) {
fprintf(stderr, "glob error: %d\n", ret);
exit(EXIT_FAILURE);
}
这里,/path/to/search/*.txt
是要搜索的文件名模式,GLOB_TILDE
表示展开 ~
为当前用户的主目录。glob_result
结构体将包含匹配的文件名列表。
for (size_t i = 0; i < glob_result.gl_pathc; ++i) {
printf("File: %s\n", glob_result.gl_pathv[i]);
}
glob
函数分配的内存:globfree(&glob_result);
将以上代码整合到一个完整的示例程序中:
#include <glob.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
glob_t glob_result;
int ret = glob("/path/to/search/*.txt", GLOB_TILDE, NULL, &glob_result);
if (ret != 0) {
fprintf(stderr, "glob error: %d\n", ret);
exit(EXIT_FAILURE);
}
for (size_t i = 0; i < glob_result.gl_pathc; ++i) {
printf("File: %s\n", glob_result.gl_pathv[i]);
}
globfree(&glob_result);
return 0;
}
这个程序将搜索 /path/to/search/
目录下所有 .txt
文件,并打印它们的文件名。注意,你需要根据实际情况修改搜索路径。