在 Debian(以及大多数 Linux 系统)中,opendir() 是 POSIX 标准库函数,用于打开一个目录流,通常和 readdir()、closedir() 一起使用。它定义在 <dirent.h> 中。
下面给你一个完整、可编译的示例,以及常见用法说明。
listdir.c#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
const char *path = "."; // 默认当前目录
DIR *dir;
struct dirent *entry;
if (argc > 1) {
path = argv[1];
}
dir = opendir(path);
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return EXIT_SUCCESS;
}
gcc listdir.c -o listdir
./listdir
./listdir /etc
opendirDIR *opendir(const char *name);
DIR*NULL,并设置 errnoreaddirstruct dirent *readdir(DIR *dirp);
NULL 表示结束或出错closedirint closedir(DIR *dirp);
DIR *dir = opendir("some_dir"); // 可能失败
✅ 正确做法:
if (dir == NULL) {
perror("opendir");
}
printf 直接打印 d_typeentry->d_type == DT_REG // 普通文件
entry->d_type == DT_DIR // 目录
⚠️ 注意:d_type 在某些文件系统(如 ext4 支持,NFS 不一定)上可能不可用。
if (entry->d_type == DT_REG) {
printf("FILE: %s\n", entry->d_name);
}
man opendir
man readdir
man closedir
如果提示没有 man 页:
sudo apt install man-db manpages-dev
如果你是想问:
可以告诉我,我可以继续详细讲。