目录
头文件
opendir()、readdir()、closedir()
都是要包含下方头文件
#include <sys/types.h>
#include <dirent.h>
opendir
函数原型
DIR *opendir(const char *name);
- 参数
name:
目录的名称
- 返回值
成功:
目录流失败:
-1
readdir
函数原型
struct dirent *readdir(DIR *dirp);
- 参数
dirp:
目录流
- 返回值
成功:
dirent的结构类型失败:
NULL
结构体信息如下
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]; /* 文件名,最长255字符 Null-terminated filename */
};
关于 d_type 文件类型在 dirent.h
中 有描述,如下
/* File types for `d_type'. */
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
};
closedir
函数原型
int closedir(DIR *dirp);
-
参数
-
dirp
dirp:
目录流
-
返回
成功:
0失败:
-1
示例:
打开一个目录 读取目录中普通文件名字,并打印出来
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#define DIR_NAME "/home/pikaqiu/xxx"
int main()
{
DIR *dirp = opendir(DIR_NAME); //打开/home/pikaqiu/xxx 目
if(dirp == NULL)
{
perror("opendir");
return -1;
}
struct dirent *dir;
while((dir = readdir(dirp)) != NULL)
{
if(dir->d_type == 8) //如果是普通文件则打印文件名字
{
printf("%s ",dir->d_name);
}
}
printf("\n");
closedir(dirp); //关闭目录
return 0;
}
如果觉得可以就点个赞吧 0^^0.