如何在不包含 dirent.h 文件的情况下列出目录?

How can I list directories without including files including dirent.h?

我搜索了关于这件事的很多:How to make C print all directories without dirent.h。我发现了一个叫做 tiny dirent 之类的东西,但它对我来说不是很有用,因为它有许可证。我发现了更多没有用的东西。现在,我想自己做,我发现唯一的办法就是自己写一个。我正在使用 GCC 进行编译,并使用 linux 进行编译。那么,如何在不包含任何头文件的情况下制作自己的 dirent.h?

这是特定于操作系统的,因为并非所有 C 实现(想想 Arduino 的某些 C 程序)都有目录。

How can I list directories without including files including dirent.h?

通过使用一些其他的库,或者直接一些syscalls(2).

您考虑过使用 ntfw(3), or readdir(3) 吗?

So, how can I make my own dirent.h without including any header files?

您使用一个好的编辑器创建 C 源文件,例如 GNU emacs. Or you use (or write) a program generating some C code (e.g. GNU bison)。

你应该好好读书operating system textbook if you want to create your own OS. Then see also OSDEV, and budget several years of full time work. See also LinuxFromScratch, and study for inspiration the source code of the Linux kernel or of FreeBSD

I am using GCC to compile

一定要阅读 GCC 的文档 (user and internals). Use it as gcc -Wall -Wextra -g. You might code your GCC plugin, or generate some C code with e.g. GPP

例如Linux readdir 返回的 struct dirent 结构有一个 d_type 成员,您可以检查类型 DT_DIR.


如果您正在编写自己的类似于 POSIX 的操作系统,您可以自己决定 dirent 结构包含哪些成员,如上面提到的 d_type 成员。

您的内核中不会有 opendir/readdir/closedir,但您必须自己实现此类功能。