一、结构体
struct dirent {
long d_ino;//inode number 索引节点号
off_t d_off;//offset to this dirent 在目录文件中的偏移
unsigned short d_reclen;//length of this d_name 文件名长
unsigned cha d_type;//the type of d_name 文件类型
char d_name[NAME_MAX + 1];//filename 文件名,最长256个字符
};
说明:
d_type可能是以下值中的其中一个:
DT_BLK:this is a block device,这是一个块设备
DT_CHR:this is a character device,这是一个字符设备
DT_DIR:this is a directory,这是一个文件夹
DT_FIFO:this is a named pipe,这是一个命名管道
DT_LNK:this is a symbolic link,这是一个符号文件
DT_REG:this is a regular file,这是一个规则文件
DT_SOCK:this is a Unix sock,这是一个Unix域套接字
DT_UNKNOWN:this file type is unknown,这个文件类型未知
二、函数
DIR *opendir(const char *name);
1.头文件
#include <dirent.h>
2.描述
opendir函数根据目录路径name打开一个目录流,并返回这个目录流指针,这个目录流指向目录name的第一个条目(entry)
3.返回值
如果成功,返回目录流指针DIR*,否则,返回NULL
4.注意
如果成功打开,不用这个目录流指针的时候,需要调用int closedir(DIR *dirp)函数释放这个目录流指针
struct dirent *readdir(DIR *dirp);
1.头文件
#include <dirent.h>
2.描述
readdir函数
3.返回值
如果成功,返回dirent*,否则返回NULL
int closedir(DIR *dirp);
1.头文件
#include <dirent.h>
2.描述
closedir函数释放一个打开的目录流
3.返回值
如果成功,返回0,否则返回-1
三、源码实现
#include <dirent.h>
#include <stdio.h>
int list_dir(char *filename) {
DIR *dirp;
if ((dirp = opendir(filename)) == NULL) {
printf("cann't open %s\n", filename);
return -1;
}
dirent *direntp;
while ((direntp = readdir(dirp)) != NULL)
printf("type:%d, name:%s\n", direntp->d_type, direntp->d_name);
closedir(dirp);
return 0;
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("input param error!!");
return -1;
}
return list_dir(argv[1]);
}