使用父子进程完成两个文件的拷贝
父进程拷贝前一半内容,子进程拷贝后一半内容
子进程结束后退出,父进程回收子进程的资源
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<wait.h>
int main(int argc,const char *argv[]){
if(argc!=3){ //判断输入文件个数是否为3
perror("err!\n");
return -1;
}
//打开文件
int srcfd=-1;
if((srcfd=open(argv[1],O_RDONLY))==-1){
perror("open err!");
return -1;
}
int desfd=-1;
if((desfd=open(argv[2],O_RDWR|O_APPEND|O_CREAT,0664))==-1){
perror("open err!");
return -1;
}
//求字符个数
char a;int num=0;
while(1){
int res=read(srcfd,&a,sizeof(a));
if(res==0){
break;
}
num++;
}
printf("num==%d\n",num);
pid_t pid=-1;
pid=fork();
if(pid>0){//父进程输入前一半字符
char b;
int i=0;
lseek(srcfd,0,SEEK_SET);
while(i<num/2){
read(srcfd,&b,sizeof(b));
write(desfd,&b,sizeof(b));
i++;
}
}
else if(pid==0){//子进程输入后一半字符
char c;
int k=0;
lseek(srcfd,num/2,SEEK_SET);
while(1){
int res=read(srcfd,&c,sizeof(c));
if(res==0){
break;
}
write(desfd,&c,sizeof(c));
}
exit(0);
}
else{
printf("fork err");
}
//关闭文件
close(srcfd);
close(desfd)
wait(NULL);
return 0;
}
思维导图: