获得目录列表
# 获得目录列表
# 获得目录列表
# 打开目录文件
#include <unistd.h>
DIR* opendir(const char* path);
1
2
2
打开参数
path
指定的目录,并返回DIR*
形态的目录流,和fopen
类似,接下来对目录的读取和搜索都要使用此返回值。
# 读出目录文件的内容
#include<sys/types.h>
#include<dirent.h>
struct dirent* readdir(DIR* dir);
1
2
3
2
3
readdir
执行成功则返回指向dirent
结构的指针,以后每次调用都用新的目录项来替换dirent结构。如果有错误发生或读取到目录文件尾则返回
NULL
。
# dirent目录结构
struct dirent
{
ino_t d_ino; //此目录进入点的inode
ff_t d_off; //目录文件开头至此目录进入点的位移
signed short int d_reclen; //d_name的长度,不包含NULL字符
unsigned char d_type; //d_name所指的文件类型
har d_name[256]; //文件名
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 关闭目录文件
# 关闭目录文件
#include<sys/types.h>
#include<dirent.h>
int closedir(DIR* dir);
1
2
3
2
3
# ls功能的实现
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc,char *argv[])
{
DIR* dir;
struct dirent* p;
char* path;
if(argc==1)
path = "./";
else
path = argv[1];
dir=opendir(path);
p=readdir(dir);
while(p!=NULL)
{
printf("%s\n",p->d_name);
p=readdir(dir);
}
closedir(dir);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
编辑 (opens new window)
上次更新: 2023/02/18, 10:09:42
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05