IO、进程、线程03
第一题:预习 opendir 和 readdir函数
opendir 和 readdir 是两个在C语言(特别是使用POSIX标准的系统,如Linux和UNIX)中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分,通常与头文件一起使用。下面详细介绍这两个函数的作用和用法。
opendir 函数
opendir 函数用于打开一个目录流,以便通过 readdir 函数读取目录内容。
函数原型:
#include #include DIR *opendir(const char *name);
参数:
- name:指向以null结尾的字符串的指针,该字符串指定了要打开的目录的路径。
返回值:
- 成功时,返回一个指向DIR类型的指针,该指针代表打开的目录流。
- 失败时,返回NULL,并设置errno以指示错误。
readdir 函数
readdir 函数用于读取目录流中的下一个目录项。
函数原型:
#include struct dirent *readdir(DIR *dirp);
参数:
- dirp:指向之前通过opendir函数打开的目录流的指针。
返回值:
- 成功时,返回一个指向dirent结构的指针,该结构包含目录项的信息。
- 读取到目录末尾或出错时,返回NULL。要区分这两种情况,可以检查errno或使用errno的包装函数,如feof(dirfd(dirp))(但注意,feof并不直接适用于目录流,这里只是提供一个类比)。实际上,当到达目录末尾时,errno不会被设置。
第二题:通过 opendir、readdir、write、read函数实现拷贝一个文件夹中的所有文件的功能(不考虑文件夹中还有文件夹的情况)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef struct sockaddr_in addr_in_t; typedef struct sockaddr addr_t; typedef struct sockaddr_un addr_un_t; int main(int argc, const char *argv[]) { if(access(argv[2],F_OK) == -1)//判断目标文件夹是否存在 { mkdir(argv[2],0777);//不存在则创建目标文件夹 }else//如果存在,则需要判断该文件是否为目录文件 { struct stat buf={0}; stat(argv[2],&buf); mode_t mode=buf.st_mode; if(S_ISDIR(mode) != 1) { fprintf(stderr,"该文件不是一个目录文件!\n"); return 1; } } DIR* df=opendir(argv[1]); if(dp == NULL) { perror("opendir"); return 1; } while(1) { struct dirent* dt=readdir(df); if(dt == NULL) { break; } if(strcmp(dt->d_name,".")==0 || strcmp(dt->d_name,"..")==0) { continue; } chdir(argv[1]);//把工作目录切换到argv[1]里面 int rfd=open(dt->d_name,O_RDONLY); if(rfd == -1) { perror("ropen"); } chdir("..");//把工作目录切换到上一级目录 chdir(argv[2]); int wfd=open(dt->d_name,O_WRONLY | O_CREAT | O_TRUNC,0666); if(wfd == -1) { perror("wopen"); } chdir(".."); while(1) { char s[16]={0}; int res=read(rfp,s,15); if(res == 0) { breaak; } write(wfp,s,strlen(buf)); } } close(rfp); close(wfp); closedir(df); return 0; }
- dirp:指向之前通过opendir函数打开的目录流的指针。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

