温馨提示×

linux readdir跨平台吗

小樊
38
2026-10-26 04:37:50
栏目: 智能运维

简短结论:readdir 本身是 POSIX 标准接口,在“类 Unix 系统”之间基本可移植,但并不是严格意义上的“全平台跨平台”(尤其在 Windows 上不原生支持)。

下面分点说明:


1. readdir 是什么标准

  • readdir 定义在 POSIX.1 标准中
  • 常见于:
    • Linux
    • macOS
    • FreeBSD / OpenBSD
    • 其他 Unix-like 系统

在这些系统上:

#include <dirent.h>

DIR *dir = opendir(".");
struct dirent *entry;

while ((entry = readdir(dir)) != NULL) {
    printf("%s\n", entry->d_name);
}

closedir(dir);

是可移植的。


2. 在 Windows 上情况如何

Windows 不原生提供 readdir:

  • Windows 使用的是:
    • FindFirstFile
    • FindNextFile
  • 或 MSVC 提供的非标准扩展:
    • _findfirst
    • _findnext

✅ 常见跨平台方案

  • 使用 MinGW / Cygwin
    • 提供 readdir 兼容层
  • 使用 跨平台封装库
    • boost::filesystem
    • std::filesystem(C++17)
    • GLib
    • Qt QDir

3. C/C++ 中的“真正跨平台”推荐

✅ C++17 起(最推荐)

#include <filesystem>

for (auto& p : std::filesystem::directory_iterator(".")) {
    std::cout << p.path() << '\n';
}
  • Linux / Windows / macOS 都支持
  • 不需要关心 readdir

4. 小结

平台 是否原生支持 readdir
Linux ✅
macOS ✅
BSD ✅
Windows ❌(需兼容层或替代 API)

结论:

  • readdir 是“Unix 跨平台”,不是“所有 OS 跨平台”
  • 若需要真正跨平台,建议用 std::filesystem 或封装库

如果你是在写 C 还是 C++、是否需要 Windows 支持,我可以给你更具体的示例。

0 踩