1.使用多进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程的资源
#include <myhead.h>
void copy_file(int fp,int fq, int start,int len)
{
//将两个文件的光标都定位在子进程开头/父进程开头(子进程末尾)
lseek(fp,start,SEEK_SET);
lseek(fq,start,SEEK_SET);
int res=0;
char buf[100]="";//定义容器存储文件内容
int count=0;//计数器,用于比较是否全部读取前半文件内容
while(1)
{
res=read(fp,buf,sizeof(buf));
count+=res;
if(count>=len)//如果count达到设定的字节数,开始拷贝
{
write(fq,buf,count);
break;
}
}
}
int main(int argc, const char *argv[])
{
//以只读的形式打开text.txt文件
int fp=-1;
if((fp=open("./text.txt",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
int size=lseek(fp,0,SEEK_END);//获取text.txt文件的大小
int len1=size/2;//子进程拷贝前一半文件内容的大小
int len2=size-len1;//父进程拷贝的后一半文件内容的大小
//以读写的方式打开work1.txt文件
int fq=-1;
if((fq=open("./work1.txt",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
{
perror("open error");
return -1;
}
pid_t pid = fork();//创建子进程
if(pid==-1)
{
printf("创建子进程失败\n");
}
else if(pid==0)//子程序拷贝后半内容
{
copy_file(fp,fq,0,len1);
}
else //父程序拷贝前半内容
{
copy_file(fp,fq,len1,len2);
}
close(fp);
close(fq);
wait(NULL);//阻塞等待子程序结束
return 0;
}
效果图:
思维导图: