1、使用多进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程的资源
代码:
#include<myhead.h>
int main(int argc, const char *argv[])
{
//定义两个文件指针
FILE *fp1=NULL;
FILE *fp2=NULL;
//创建子进程
pid_t pid = fork();
if(pid > 0)
{
//在父进程中打开被拷贝文件
if((fp1=fopen("./test.txt","r"))==NULL)
{
perror("fopen error");
return -1;
}
//在父进程中打开拷贝文件
if((fp2=fopen("./copy.txt","w"))==NULL)
{
perror("fopen error");
return -1;
}
//确定位置
fseek(fp1,0,SEEK_END);
size_t size = ftell(fp1);
fseek(fp1,0,SEEK_SET);
//读取并复制文件内容
char c;
while(ftell(fp1)<=size/2)
{
fread(&c,1,1,fp1);
fwrite(&c,1,1,fp2);
}
//关闭文件
fclose(fp1);
fclose(fp2);
}
else if(pid==0)
{
//在子进程中打开被拷贝文件
if((fp1=fopen("./test.txt","r"))==NULL)
{
perror("fopen error");
return -1;
}
//在子进程中打开拷贝文件
if((fp2=fopen("./copy.txt","a"))==NULL)
{
perror("fopen error");
return -1;
}
//确定位置
fseek(fp1,0,SEEK_END);
size_t size = ftell(fp1);
int t=fseek(fp1,size/2,SEEK_SET);
//判断位置是否合法
if(t!=0)
{
printf("error\n");
return -1;
}
//读取并复制文件内容
char x;
while(fread(&x,1,1,fp1))
{
fwrite(&x,1,1,fp2);
}
//关闭文件
fclose(fp1);
fclose(fp2);
exit(0);
}
//阻塞回收进程资源
wait(NULL);
return 0;
}
运行结果:
思维导图: