C语言编程中对目录进行基本的打开关闭和读取操作详解
C语言opendir()函数:打开目录函数
头文件:
#include<sys/types.h>#include<dirent.h>
定义函数:
DIR*opendir(constchar*name);
函数说明:opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值.
返回值:成功则返回DIR*型态的目录流,打开失败则返回NULL.
错误代码:
1、EACCESS权限不足。
2、EMFILE已达到进程可同时打开的文件数上限。
3、ENFILE已达到系统可同时打开的文件数上限。
4、ENOTDIR参数name非真正的目录。
5、ENOENT参数name指定的目录不存在,或是参数name为一空字符串。
6、ENOMEM核心内存不足。
C语言closedir()函数:关闭目录
头文件:
#include<sys/types.h>#include<dirent.h>
定义函数:
intclosedir(DIR*dir);
函数说明:closedir()关闭参数dir所指的目录流。
返回值:关闭成功则返回0,,失败返回-1,,错误原因存于errno中。
错误代码:EBADF参数dir为无效的目录流。
范例:参考readir()。
C语言readdir()函数:读取目录函数
头文件:
#include<sys/types.h>#include<dirent.h>
定义函数:
structdirent*readdir(DIR*dir);
函数说明:readdir()返回参数dir目录流的下个目录进入点。结构dirent定义如下:
structdirent { ino_td_ino;//d_ino此目录进入点的inode ff_td_off;//d_off目录文件开头至此目录进入点的位移 signedshortintd_reclen;//d_reclen_name的长度,不包含NULL字符 unsignedchard_type;//d_typed_name所指的文件类型d_name文件名 hard_name[256]; };
返回值:成功则返回下个目录进入点.有错误发生或读取到目录文件尾则返回NULL.
附加说明:EBADF参数dir为无效的目录流。
范例
#include<sys/types.h> #include<dirent.h> #include<unistd.h> main() { DIR*dir; structdirent*ptr; inti; dir=opendir("/etc/rc.d"); while((ptr=readdir(dir))!=NULL) { printf("d_name:%s\n",ptr->d_name); } closedir(dir); }
执行:
d_name:. d_name:.. d_name:init.d d_name:rc0.d d_name:rc1.d d_name:rc2.d d_name:rc3.d d_name:rc4.d d_name:rc5.d d_name:rc6.d d_name:rc d_name:rc.local d_name:rc.sysinit