Linux目录文件 维护着一个链表的数据结构,目录文件的结构和单向链表的节点的类似,可利用链表的遍历方法来实现目录文件遍历.但是直接使用目录流对象不会得到一个链表的节点(因为是流对象),需要配合readdir指令来移动流的当前位置指针,并获得相应的链表节点(目录下的文件的信息)
需要的头文件
#include<dirent.h>
#include<sys.types>
//和流无关,目录相关操作用
#include<unistd.h>
目录的基本操作单位,
1.
DIR* dir =opendir([path]) ;
使用opendir函数,返回目录文件的结构体指针,指针指向目录的第一个文件
2.struct dirent* filelist = readdir(dir);
重要的信息排序:1.文件名 2.文件类型 3.文件长度 4.文件的inode 5.下一个dirent的偏移信息(一般用不到,这里是因为根据文件名的长度不同,分配的空间也不同,所以步长也不一样).
通过readdir函数来获取目录结构体中保存的文件指针
目录文件的基本操作:
//所有和当前工作目录有关的指令使用时,都需要考虑是否需要修改当前工作目录
//更改目录需要使用新的目录的地址
1.获取当前工作目录
#include<unistd.h>
char* getcwd(char* buf,size_t size);
2.更改当前工作目录
int chdir(const char* path);
3.创建和删除目录
//当创建的目录不存在时,需要赋予其权限,但是也会受到umask的影响
创建 int mkdir(const char* path,mode_t mode);
删除 int rmdir(const char* path);
4.打开关闭目录流
DIR* dir = opendir(const char* path);
closedir(DIR* dir);
5.从目录流中获取dirent信息
struct dirent* pdirent = readdir(DIR* dir) 此时文件流指针会向后移动一个单位
6.由于其属于流,具有流的性质,因此也拥有流的相应指针
返回当前流的位置
off_t telldir(DIR* dir);
设置到相应流的位置
void seekdir(DIR* dir,off_t offset); //会设定到指定位置的下一个位置
重定位到目录流的起始位置
void rewind(DIR* dir);