继上文对于文件IO的讲解,本文将继续为大家介绍文件的操作第三部分目录IO操作,同之前的学习习惯相同我们也从打开、读写、关闭目录,这个思路对于目录IO的各个函数接口进行具体的详解。
目录IO学习思路
打开目录----opendir
读取目录-----readdir
关闭目录-----closedir
1.打开文件
函数接口:opendir
DIR *opendir(const char *name);
作用:
- 打开一个目录获得一个目录流指针。
参数:
- name:目录名
返回值:
- 成功返回目录流指针
- 失败返回NULL
int main(void) { DIR *dir = opendir("."); if(NULL == dir) { printf("fail to opendir.\n"); return -1; } return 0; }
以上代码段为打开“.”当前路径下的文件,该段代码的功能为打开当前文件路径下的目录,并且可以判断是否失败打开的操作。
2.读文件
函数接口:readdir
struct dirent *readdir(DIR *dirp);
作用:
- 从目录流中读取文件信息并将保存信息的结构体地址返回。
参数:
- dirp:目录流指针
返回值:
- 成功返回包含文件信息的结构体
- 失败或者读到目录流末尾返回NULL
参考linux手册,输入man 3 readdir,查看返回的结构体包含的内容
struct dirent { ino_t d_ino; /* Inode number */ 索引节点号 off_t d_off; /* Not an offset; see below */ unsigned short d_reclen; /* Length of this record */ unsigned char d_type; /* Type of file; not supported by all filesystem types */ char d_name[256]; /* Null-terminated filename */ 文件名 };
int main(void) { DIR *dir = opendir("."); if(NULL == dir) { printf("fail to opendir.\n"); return -1; } //打开目录 while(1) //循环读取 { struct dirent *info = readdir(dir); if(NULL == info) //判断是否读取成功和结束标识 { break; } printf("%ld %s\n", info->d_ino, info->d_name); } closedir(dir); //关闭目录 return 0; }
以上代码为第一个代码的延续,在打开目录以后进行readdir的读取目录操作,并且打出当前路径下的各个目录的索引号和文件名的信息。
3.关闭文件
函数接口:closedir
int closedir(DIR *dirp);
作用:
- 关闭之前已经打开的目录流对象。
参数:
- *dirp:opendir的返回结果中目录流对象
返回值:
- 成功返回0
- 失败返回-1
目录流指针有借有还,在创建了文件留指针以后要记得关闭。
目录IO的基础操作就为以上的步骤,后续文章将为大家介绍目录IO的提升操作,希望大家持续关注,如果有问题,希望大家及时私聊我,或者在评论区积极讨论,谢谢大家!