首页 / 操作系统 / Linux / Linux C函数之文件及目录函数
opendir: 打开目录头文件: sys/types.h dirent.h函数定义: DIR *opendir(const char *name);说明: opendir()用来打开参数name指定的目录, 并返回DIR*形态的目录流, 和open()类似, 接下来对目录的读取和搜索都要使用此返回值. 成功则返回DIR*型态的目录流, 打开失败则返回NULL.错误代码:EACCESS 权限不足EMFILE 已达到进程可同时打开的文件数上限ENFILE 已达到系统可同时打开的文件数上限ENOTDIR 参数name非真正的目录ENOENT 参数name指定的目录不存在, 或是参数name为一空字符串ENOMEM 核心内存不足readdir: 读取目录头文件: sys/types.h dirent.h定义函数: struct dirent *readdir(DIR *dir);说明: readdir()返回参数dir目录流的下个目录进入点. 结构dirent定义如下:struct dirent{ino_t d_ino;ff_t d_off;signed short int d_reclen;unsigned char d_type;char d_name[256];};d_ino 此目录进入点的inoded_off 目录文件开头至此目录进入点的位移d_reclen _name的长度, 不包含NULL字符d_type d_name所指的文件类型d_name 文件名成功则返回下个目录进入点, 有错误发生或读取到目录文件尾则返回NULL. EBADF参数dir为无效的目录流.应用举例:#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <dirent.h>int main(void){DIR *dir;struct dirent *ptr;int i;dir = opendir("/etc/rc.d");while((ptr = readdir(dir)) != NULL){printf("d_name: %s
", ptr->d_name);}return 0;}运行结果:d_name: rc1.dd_name: rc3.dd_name: rcd_name: rc2.dd_name: rc0.dd_name: rc.sysinitd_name: ..d_name: rc6.dd_name: rc4.dd_name: init.dd_name: rc.locald_name: rc5.dd_name: .