layout: post title: "UNIX环境下用C语言列出某个目录下的所有文件" date: 2026-03-24 00:00:00 +0800 categories: [CPlus] tags: [cpp, cmake]
演示在UNIX环境下,用C语言列出某个目录下的所有文件
测试环境
在Ubuntu 24.04环境下测试通过,其它类UNIX环境下应该也可以运行,Windows下理论不支持
源码片段
#include <stdio.h>
#include <dirent.h>
int main(int argc, char *argv[]) {
printf("hello %s\n", "world");
DIR *dp;
struct dirent *dirp;
if (argc != 2) {
return 1;
}
if ((dp = opendir(argv[1])) == NULL) {
fprintf(stderr, "can't open %s", argv[1]);
return 2;
}
while((dirp = readdir(dp)) != NULL) {
printf("%s\n", dirp->d_name);
}
closedir(dp);
return 0;
}
完整源码地址:pnnh/apue-listfile
源码解释
dirent.h是一个POSIX标准提供的头文件,广泛用于Unix-like系统。它主要用于操作目录,包括读取目录内容、遍历目录、获取文件或目录信息等。
调用opendir将返回一个DIR*,它是一个指向具体目录的不透明指针,后续其它对目录的操作函数需要传递该指针。
调用readdir将返回dirent*,它指向目录中的一个条目,可能是文件或文件夹,其中包含文件名称。
目录操作完成后,需要调用closedir关闭目录以避免资源泄漏。
编译
进入源码目录执行以下命令:
mkdir cmake-build && cd cmake-build
cmake ..
make
在构建目录下将生成ApueListfile可执行文件
如果编译出错请根据错误信息重复以上编译步骤
运行
通过./ApueListfile <directory>的方式运行
其中<directory>需要是绝对目录,比如执行以下命令列表都可以运行成功
./ApueListfile /tmp
./ApueListfile /home
./ApueListfile /var
注意: 当前用户需要有对参数目录的访问权限