名称:打开一个目录
总揽:
#include<dirent.h>
#include<sys/types.h>
DIR *opendir(const char *name)
描述:
opendir()函数用来打开一个指定的目录name,返回一个目录流DIR指针。
目录流的位置为第一个目录项上。
返回值:
opendir()返回执行成功返回一个目录流指针,失败返回NULL并设置errno.
错误:
EACCESS: 权限不允许
EMFILE: 进程使用太多文件描述符了
ENFILE: 当前系统中打开太多文件了
ENOENT: 要打开的目录不存在或name是一个空字符串
ENOMEM: 没有足够的内存完成操作
ENOTDIR: 指定的name不是一个目录
实例:
#include<stdio.h>
#include<stdlib.h>
#include<dirent.h>
int main(void){
DIR *dir;
struct dirent *dirp;
if((dir=opendir("tmpdir"))==NULL){
printf("Open dir tmpdir fail\n");
exit(1);}
while((dirp=readdir(dir))!=NULL)
printf("Name:%s\n",dirp->d_name);
closedir(dir);
return(0);}
扩展:
(1).结构体dirent的定义
位于:/usr/include/bits/dirent.h
定义:
struct dirent{
#ifndef __USE_FILE_OFFSET64
__ino_t d_ino; /*inode号*/
__off_t d_off; /*下个dirent项的偏移量*/
#else
__ino64_t d_ino;
__off64_t d_off;
#endif
unsigned short int d_reclen; /*记录的长度*/
unsigned char d_type; /*文件类型*/
char d_name[255]; /*文件名*/
};
(2).文件类型d_type的定义
位于:/usr/include/dirent.h
定义:
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
};
(3).DIR定义
位于:/usr/include/dirent.h
定义:
typedef struct __dirstream DIR;