#include<myhead.h>
int main(int argc, const char *argv[])
{
//判断是否传入两个文件
if(argc!=3)
{
printf("intput file error\n");
printf("usage:./a.out srcfile dstfile\n");
return -1;
}
//以只读的形式打开源文件
FILE *srcfp;
if((srcfp=fopen(argv[1],"r"))==NULL)
{
perror("srcfile open error");
return -1;
}
//以只写的形式打开文件
FILE *dstfp;
if((dstfp=fopen(argv[2],"w"))==NULL)
{
perror("dstfile open error");
return -1;
}
//求文件的大小
fseek(srcfp,0,SEEK_END);
int size=ftell(srcfp);
//定义搬运工
char buf[100];
//开始创建进程
pid_t pid;
pid=fork(); //此时产生了子进程
//无论是父进程还是子进程都会执行下面的语句
if(pid>0)
{
printf("父进程\n");
//将光标定位在开头
fseek(srcfp,0,SEEK_SET);
while(ftell(srcfp)<(size/2))
{
fgets(buf,sizeof(buf),srcfp);
fputs(buf,dstfp);
}
fflush(dstfp);
wait(NULL);
}
else if(pid==0)
{
printf("子进程\n");
//将光标定位在中间位置
fseek(srcfp,size/2,SEEK_SET);
while(1)
{
fgets(buf,sizeof(buf),srcfp);
if(feof(srcfp))
{
break;
}
fputs(buf,dstfp);
}
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
//关闭文件
fclose(srcfp);
fclose(dstfp);
printf("拷贝成功\n");
return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{
//判断是否传入两个文件
if(argc!=3)
{
printf("intput file error\n");
printf("usage:./a.out srcfile dstfile\n");
return -1;
}
//以只读的形式打开源文件
FILE *srcfp;
if((srcfp=fopen(argv[1],"r"))==NULL)
{
perror("srcfile open error");
return -1;
}
//以只写的形式打开文件
FILE *dstfp;
if((dstfp=fopen(argv[2],"w"))==NULL)
{
perror("dstfile open error");
return -1;
}
//求文件的大小
fseek(srcfp,0,SEEK_END);
int size=ftell(srcfp);
//定义搬运工
char buf[100];
//开始创建进程
pid_t pid1;
pid1=fork(); //此时产生了子进程
if(pid1>0)
{
pid_t pid2;
pid2=fork(); //在子进程中再次创建进程
if(pid2>0)
{
//将光标定位在开头
fseek(srcfp,0,SEEK_SET);
while(ftell(srcfp)<(size/3))
{
fgets(buf,sizeof(buf),srcfp);
fputs(buf,dstfp);
}
fflush(dstfp);
wait(NULL);
wait(NULL);
}
else if(pid2==0)
{
//将光标定位在三分之一处
fseek(srcfp,size/3,SEEK_SET);
while(ftell(srcfp)<((size/3)*2))
{
fgets(buf,sizeof(buf),srcfp);
fputs(buf,dstfp);
}
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
}
else if(pid1==0)
{
//将光标定位在三分之二处
fseek(srcfp,(size/3)*2,SEEK_SET);
while(ftell(srcfp)<size)
{
fgets(buf,sizeof(buf),srcfp);
fputs(buf,dstfp);
}
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
//关闭文件
fclose(srcfp);
fclose(dstfp);
printf("拷贝成功\n");
return 0;
}