UNIX环境下用C语言列出某个目录下的所有文件
演示在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
源码解释
调用```opendir```将返回一个```DIR*```,它是一个指向具体目录的不透明指针,后续其它对目录的操作函数需要传递该指针。
调用```readdir```将返回```dirent*```,它指向目录中的一个条目,可能是文件或文件夹,其中包含文件名称。
目录操作完成后,需要调用```closedir```关闭目录以避免资源泄漏。
### 编译
进入源码目录执行以下命令:
```bash
mkdir cmake-build && cd cmake-build
cmake ..
make
在构建目录下将生成ApueListfile可执行文件
如果编译出错请根据错误信息重复以上编译步骤
运行
通过./ApueListfile <directory>的方式运行
其中<directory>需要是绝对目录,比如执行以下命令列表都可以运行成功
./ApueListfile /tmp
./ApueListfile /home
./ApueListfile /var
注意: 当前用户需要有对参数目录的访问权限
本文由作者按照
CC BY 4.0
进行授权