使用两个子进程完成两个文件的拷贝,子进程1拷贝前一半内容,子进程2拷贝后一半内容,父进程用于回收两个子进程的资源
#include<myhead.h>int main(int argc, const char *argv[])
{int pid=-1;int fd = -1;int fa = -1;int fb = -1;//求出文件大小size_t size_fork = -1;if((fd = open("./cpy.txt",O_RDONLY))== -1){perror("open error");return -1;}size_fork=lseek(fd,0,SEEK_END);char str1[100]="0";char str2[100]="0";//创建第一个子进程pid = fork();//判断在父进程中再次创建一个子进程if(pid > 0){ pid = -1;//创建第二个子进程pid = fork();if(pid > 0){//父进程——————主文件//打开主文件}else if(pid == 0){//子程序——————拷贝文件的下一半//打开第一个文件if((fa = open("./1.txt",O_WRONLY|O_TRUNC))== -1){perror("open error");return -1;}lseek(fd,size_fork/2,SEEK_SET);read(fd,str2,size_fork/2);write(fa,str2,size_fork/2);exit(EXIT_SUCCESS);}else{perror("fork error");return -1;}}else if(pid == 0){//子进程—————拷贝主文件的上一半//打开二个子文件if((fb = open("./2.txt",O_WRONLY|O_TRUNC))==-1){perror("open error");return -1;}lseek(fd,0,SEEK_SET);read(fd,str1,size_fork/2);write(fb,str1,size_fork/2);exit(EXIT_SUCCESS);}else{perror("fork error");return -1;}wait(NULL);wait(NULL);close(fd);close(fa);close(fb);return 0;
}
效果图: