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;
}
程序运行前:
程序运行后: