一直对于linux如何操作目录不了解,最近研究了一下dirent.h,以下是研究结果:
有两个dirent.h:
/usr/include/dirent.h
定义了目录流结构DIR和一些操作目录节点的接口,包括打开、读、关闭,以及对流中的指针位置的操作;十分类似文件操作,其中DIR没有实际定义,估计比较复杂,不过在使用过程中,他只是传来传去,并不需要对他做修改,有点类似文件句柄。常用的接口有:
extern DIR *opendir (__const char *__name) __nonnull ((1));
extern int scandir (__const char *__restrict __dir,...)
extern int closedir (DIR *__dirp) __nonnull ((1));
extern struct dirent *readdir (DIR *__dirp) __nonnull ((1));
/usr/include/bits/dirent.h
定义了dir下一个文件节点的数据结构,包括名字,文件类型等属性,通过readdir获得了这个结构后,可以使用stat函数来进一步解析这些属性,以下是各种文件类型
enum
{
DT_UNKNOWN = 0,
# define DT_UNKNOWN DT_UNKNOWN
DT_FIFO = 1,
# define DT_FIFO DT_FIFO
DT_CHR = 2,
# define DT_CHR DT_CHR
DT_DIR = 4,
# define DT_DIR DT_DIR
DT_BLK = 6,
# define DT_BLK DT_BLK
DT_REG = 8,
# define DT_REG DT_REG
DT_LNK = 10,
# define DT_LNK DT_LNK
DT_SOCK = 12,
# define DT_SOCK DT_SOCK
DT_WHT = 14
# define DT_WHT DT_WHT
};