思维导图
错误循环,能拷贝。
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include<head.h>
int main(int argc, const char *argv[])
{
//打开文件
FILE *fp=fopen(argv[1],"r");
if(fp==NULL)
{
perror("fp error");
return -1;
}
FILE *fp2=fopen(argv[2],"w");
if(fp2==NULL)
{
perror("fp2 error");
return -1;
}
//光标
int flag=lseek(fp->_fileno,0,SEEK_END)/2;
fseek(fp,0,SEEK_SET);
//计数
int count=0;
//子进程1
pid_t pid1=fork();
if(pid1==0)
{
char buf[10];
while(1)
{
puts("9");
int res=fread(buf,sizeof(char),sizeof(buf),fp);
fwrite(buf,sizeof(char),res,fp2);
count+=res;
if(count>=flag)
{
exit(EXIT_SUCCESS);
}
}
}else if(pid1>0)
{
//子进程2
char buf[12];
int res;
int pid2=fork();
if(pid2==0)
{
while(!feof(fp))
{
res=fread(buf,sizeof(buf[1]),sizeof(buf),fp);
fwrite(buf,sizeof(buf[1]),res,fp2);
}
exit(EXIT_SUCCESS);
}else if(pid2>0)
{
wait(NULL);
wait(NULL);
//关闭文件
fclose(fp);
fclose(fp2);
}
}
return 0;
}