下面是一个Debian(Linux)下使用 readdir 读取目录内容的 C 语言示例。
readdir 属于 POSIX 标准,在 Debian / Ubuntu 等系统上都可以直接使用。
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main(int argc, char *argv[])
{
const char *path;
DIR *dir;
struct dirent *entry;
if (argc < 2) {
path = "."; // 默认当前目录
} else {
path = argv[1];
}
dir = opendir(path);
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
printf("Reading directory: %s\n", path);
while ((entry = readdir(dir)) != NULL) {
// 跳过 "." 和 ".."
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0) {
continue;
}
printf("%s\n", entry->d_name);
}
closedir(dir);
return EXIT_SUCCESS;
}
gcc readdir.c -o readdir
./readdir
./readdir /home
./readdir /etc
输出示例:
Reading directory: /etc
passwd
shadow
hostname
network/
...
DIR *opendir(const char *name);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);
struct dirent 常用成员struct dirent {
ino_t d_ino; // inode 号
off_t d_off;
unsigned short d_reclen;
unsigned char d_type; // 文件类型(DT_REG / DT_DIR)
char d_name[256]; // 文件名
};
if (entry->d_type == DT_REG) {
printf("File: %s\n", entry->d_name);
} else if (entry->d_type == DT_DIR) {
printf("Dir: %s\n", entry->d_name);
}
⚠️ 注意:
d_type在某些文件系统(如 NFS)上可能不可用,此时需使用stat()。
如果你需要:
可以继续问我。