1.思维导图
2.使用多进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程的资源。
#include<myhead.h>
int main(int argc, const char *argv[])
{
//判断终端输入的参数是否合法
if(argc!=3)
{
printf("input file error\n");
printf("usage:./a,out srcfile destfile\n");
return -1;
}
//定义文件指针,以只读的方式打开文件
FILE *srcfp=NULL;
srcfp=fopen(argv[1],"r");
if(srcfp==NULL)
{
perror("fopen error");
return -1;
}
//定义文件指针,以只写的方式打开
FILE *destfp=NULL;
destfp=fopen(argv[2],"w");
if(destfp==NULL)
{
perror("fopen error");
return -1;
}
//将光标定位在文件结束位置
fseek(srcfp,0,SEEK_END);
//返回值就是文件大小
int size=ftell(srcfp);
//把光标移动到文件开头
fseek(srcfp,0,SEEK_SET);
//定义父进程
pid_t pid=-1;
//使用父进程创建一个子进程
pid=fork();
//判断父子进程执行的程序代码
if(pid>0)//判断是父进程
{
char buf;
//光标移动到文件的一半
fseek(srcfp,size/2,SEEK_SET);
while(ftell(srcfp)!=size)//当文件读写到最后时结束
{
fread(&buf,1,1,srcfp);//读
fwrite(&buf,1,1,srcfp);//写
}
//退出进程
exit(EXIT_SUCCESS);
}
else if(pid==0)//子进程
{
//光标移动到文件开头
fseek(destfp,0,SEEK_SET);
char buf;
while(ftell(destfp)<size)//读取到文件一半大小就结束
{
fread(&buf,1,1,destfp);//读
fwrite(&buf,1,1,destfp);//写
}
//退出进程
exit(EXIT_SUCCESS);
}
if(pid>0)
{
//回收进程
wait(NULL);
wait(NULL);
}
//关闭文件
fclose(srcfp);
fclose(destfp);
return 0;
}
程序运行前:
程序运行后: