使用两个子进程完成两个文件的拷贝,子进程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;
}
效果图: