作业要求:
- 使用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;
}
运行截图: