作业要求:
- 使用write 和 read 实现 文件夹拷贝功能,不考虑递归拷贝
- 使用循环+fork的形式。创建一条进程链,链条上总共有100个进程 要求:程序不崩溃
作业1:使用write 和 read 实现 文件夹拷贝功能,不考虑递归拷贝
运行代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<dirent.h>
int main(int argc, const char *argv[])
{//打开拷贝文件夹DIR * dir = opendir(argv[1]);if(dir == NULL){perror("opendir");return -1;}//创建目标文件夹char sys[10]="mkdir ";strcat(sys,argv[2]);system(sys); struct dirent *dnt;//文件夹结构体声明//文件夹文件遍历while((dnt = readdir(dir))!=NULL){//排除 . 和 ..if(strcmp(".",dnt->d_name)==0||strcmp("..",dnt->d_name)==0){continue;}//读文件char name_r[100] = {0}; strcpy(name_r,argv[1]);strcat(name_r,"/");strcat(name_r,dnt->d_name);int rfp = open(name_r,O_RDONLY);if(rfp==-1){perror("open1");return -1;}//写文件char name_w[100] = {0};strcpy(name_w,argv[2]);strcat(name_w,"/");strcat(name_w,dnt->d_name);struct stat *mode;int stat1 = stat(name_r,mode);int wfp = open(name_w,O_WRONLY | O_TRUNC | O_CREAT,0666);char temp[1]={0};while(1){int res = read(rfp,temp,sizeof(temp));if(res <= 0){break;}write(wfp,temp,sizeof(temp));}close(rfp);close(wfp);}closedir(dir);return 0;
}
运行截图:
作业2:使用循环+fork的形式。创建一条进程链,链条上总共有100个进程 要求:程序不崩溃
运行代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(int argc, const char *argv[])
{int n=100;for(int i=0;i<n;i++){int res = fork();if(res == -1){return 1;}else if(res == 0){printf("%d\n",getpid());break;}else{sleep(1);}}return 0;
}
运行截图: