1)opendir
功能:打开一个目录文件;
原型:
#include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name);
参数:
char *name:指定要打开的目录的路径以及名字;
返回值:
成功,返回指针;
失败,返回NULL,更新errno;
2)closedir
功能:关闭目录;
原型:
#include <sys/types.h> #include <dirent.h> int closedir(DIR *dirp);
参数:
DIR *dirp:指向要关闭的文件的指针名;
返回值:
成功,返回0;
失败,返回-1,更新errno;
3)readdir
功能:读取目录;
原型:
#include <dirent.h> struct dirent *readdir(DIR *dirp);
参数:
DIR *dirp:指向要读取的文件指针名
返回值:
成功,返回结构体指针;
失败,返回NULL; 更新errno;
目录读取完毕,返回NULL,不更新errno;
结构体成员:
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 */
};
4)综合练习:打印当前路径下所有文件的名字,除了隐藏文件
#include <stdio.h>
#include <head.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
DIR* dp = opendir("./");
if(NULL == dp)
{
ERR_MSG("opendir");
return -1;
}
printf("opendir success\n");
int i = 0;
while(1)
{
struct dirent* rp = readdir(dp);
if(NULL == rp)
{
if(0 == errno)
{
printf("目录读取完毕\n");
break;
}
else
{
ERR_MSG("readdir");
return -1;
}
}
//判断是否是隐藏文件:以.字符开头
if(rp->d_name[0] != '.') //*(rp->d_name)
printf("[%d]%s\n", ++i, rp->d_name);
}
if(closedir(dp) < 0)
{
ERR_MSG("closedir");
return -1;
}
return 0;
}