在 Debian(及其他 Linux 系统)中,opendir 是 POSIX 标准 C 库函数,用于打开一个目录流,通常配合 readdir、closedir 使用来读取目录内容。
下面给你一个完整、可用的示例,并说明编译方法。
相关头文件:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
核心函数:
DIR *opendir(const char *name);struct dirent *readdir(DIR *dirp);int closedir(DIR *dirp);#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "用法: %s <目录>\n", argv[0]);
return 1;
}
DIR *dir = opendir(argv[1]);
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
gcc readdir_example.c -o readdir_example
./readdir_example /etc
输出示例:
.
..
passwd
hosts
resolv.conf
...
. 和 ..readdir 会返回:
.(当前目录)..(上级目录)通常需要过滤:
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
d_type 判断文件类型(Linux 扩展)if (entry->d_type == DT_DIR)
printf("[目录] %s\n");
else if (entry->d_type == DT_REG)
printf("[文件] %s\n");
opendir 返回 NULL 时,用 perror 查看原因如果你愿意,我也可以给你:
直接告诉我你的使用场景即可。