Linux C/C++ |
您所在的位置:网站首页 › opendir返回值 › Linux C/C++ |
opendir(打开目录) 相关函数open,readdir,closedir,rewinddir,seekdir,telldir,scandir 表头文件#include #include 定义函数DIR * opendir(const char * name); 函数说明opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。 返回值成功则返回DIR* 型态的目录流,打开失败则返回NULL。 错误代码EACCESS 权限不足 EMFILE 已达到进程可同时打开的文件数上限。 ENFILE 已达到系统可同时打开的文件数上限。 ENOTDIR 参数name非真正的目录 ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。 ENOMEM 核心内存不足。
readdir(读取目录) 相关函数open,opendir,closedir,rewinddir,seekdir,telldir,scandir 表头文件#include #include 定义函数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; har d_name[256; }; d_ino 此目录进入点的inode d_off 目录文件开头至此目录进入点的位移 d_reclen _name的长度,不包含NULL字符 d_type d_name 所指的文件类型 d_name 文件名 返回值成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL。 附加说明EBADF参数dir为无效的目录流。
closedir(关闭目录) 相关函数opendir 表头文件#include #include 定义函数int closedir(DIR *dir); 函数说明closedir()关闭参数dir所指的目录流。 返回值关闭成功则返回0,失败返回-1,错误原因存于errno 中。 错误代码EBADF 参数dir为无效的目录流 范例参考readir()。
下面我们开发一个小程序,这个程序有一个参数.如果这个参数是一个文件名,我们输出这 个文件的大小和最后修改的时间,如果是一个目录我们输出这个目录下所有文件的大小和 修改时间. 点击(此处)折叠或打开 #include #include #include #include #include #include #include static int get_file_size_time(const char *filename) { struct stat statbuf; if (stat(filename, &statbuf) == -1) { printf("Get stat on %s Error:%s\n", filename, strerror(errno)); return (-1); } if (S_ISDIR(statbuf.st_mode))return (1); if (S_ISREG(statbuf.st_mode)) printf("%s size:%ld bytes\tmodified at %s", filename, statbuf.st_size, ctime(&statbuf.st_mtime)); return (0); } int main(int argc, char **argv) { DIR *dirp; struct dirent *direntp; int stats; char buf[80]; if (argc != 2) { printf("Usage:%s filename\n\a", argv[0]); exit(1); } if (((stats = get_file_size_time(argv[1])) == 0) || (stats == -1))exit(1); if ((dirp = opendir(argv[1])) == NULL) { printf("Open Directory %s Error:%s\n", argv[1], strerror(errno)); exit(1); } while ((direntp = readdir(dirp)) != NULL){ sprintf(buf,"%s/%s",argv[1],direntp->d_name); if (get_file_size_time(buf) == -1)break; } closedir(dirp); exit(1); } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |