在 Linux 中,opendir() 函数用于打开一个目录流,以便读取目录中的文件和子目录。要实现目录过滤,您可以使用 readdir() 函数遍历目录,并使用 fnmatch() 函数或正则表达式来过滤所需的文件和目录。
以下是一个简单的示例,展示了如何使用 opendir()、readdir() 和 fnmatch() 实现目录过滤:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <fnmatch.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
fprintf(stderr, "Usage: %s <directory> <pattern>\n", argv[0]);
return EXIT_FAILURE;
}
const char *dir = argv[1];
const char *pattern = argv[2];
DIR *dp = opendir(dir);
if (!dp) {
perror("opendir");
return EXIT_FAILURE;
}
struct dirent *entry;
while ((entry = readdir(dp))) {
if (fnmatch(pattern, entry->d_name, 0) == 0) {
printf("%s\n", entry->d_name);
}
}
closedir(dp);
return EXIT_SUCCESS;
}
在这个示例中,程序接受两个命令行参数:要遍历的目录和要匹配的模式。然后,它使用 opendir() 打开目录,并使用 readdir() 遍历目录中的每个条目。对于每个条目,它使用 fnmatch() 函数检查条目名称是否与给定的模式匹配。如果匹配,则打印条目名称。
要编译此程序,请使用以下命令:
gcc -o filter_directory filter_directory.c
然后,您可以使用以下命令运行程序,其中 <directory> 是要遍历的目录,<pattern> 是要匹配的模式:
./filter_directory <directory> <pattern>
例如,要列出目录中所有以 .txt 结尾的文件,您可以运行:
./filter_directory /path/to/directory "*.txt"