使用多进程拷贝文件,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程
#include <myhead.h>
int main(int argc, const char *argv[])
{
//定义文件描述符变量
int fd=-1;
if((fd=open("./01.txt",O_RDONLY))==-1) //以只读的形式打开文件
{
perror("open error");
return -1;
}
int fd1=-1;
if((fd1=open("./test.txt",O_WRONLY | O_CREAT | O_TRUNC,0664))==-1)//以只写的形式打开文件
{
perror("open error");
return -1;
}
int len=lseek(fd,0,SEEK_END); //获取文件大小
pid_t pid=-1; //创建一个子进程
pid=fork();
//定义字符串存储读取的数据
char buf[128]="";
int res=0;
int size=0;
if(pid>0)
{
lseek(fd,0,SEEK_SET); //将两个文件的光标定位在开头位置
lseek(fd1,0,SEEK_SET);
while(1)
{
res=read(fd,buf,sizeof(buf)); //父进程完成的代码
size+=res; //记录读取的大小
//拷贝文件后一半
if(size>=len/2 || res==0)
{
write(fd1,buf,sizeof(buf));
break;
}
}
}else
{
lseek(fd,size/2,SEEK_SET);//将光标定位在文件的中间位置
lseek(fd1,size/2,SEEK_SET);
while(1)
{
res=read(fd,buf,sizeof(buf)); //子进程完成的代码
size+=res;
//完成文件剩余内容的拷贝
if(size>=size-size/2 ||res==0)
{
write(fd1,buf,sizeof(buf));
break;
}
}
sleep(1);
exit(EXIT_SUCCESS);
}
wait(NULL); //阻塞等待子进程结束
printf("子进程回收成功\n");
close(fd);
close(fd1);
return 0;
}