思维导图
进程状态间的转化:
创建出三个进程完成两个文件之间拷贝工作,子进程1拷贝前一半内容,子进程2拷贝后一半内容,父进程回收子进程的资源
#include <head.h>
int main(int argc, const char *argv[])
{
FILE *fp1=NULL,*fp2=NULL;//定义两个文件指针用于读写
if((fp1=fopen(argv[1],"r"))==NULL)
{
perror("");
return -1;
}
if((fp2=fopen(argv[2],"w"))==NULL)
{
perror("");
return -1;
}
fseek(fp1,0,SEEK_END);
int size=ftell(fp1);
fseek(fp1,0,SEEK_SET);
//定义父进程
pid_t father=-1;
father=fork();//使用父进程创建子进程
if(father==0)//判断是子进程1
{
pid_t child=fork();
if(child==0)//判断是子进程2
{
sleep(1);//等待子程序1拷贝上面一般的文件
char buf;
fseek(fp1,size/2,SEEK_SET);//手动光标后移
while(ftell(fp1)!=size)//当文件读写到最后时结束循环
{
fread(&buf,1,1,fp1);//读
fwrite(&buf,1,1,fp2);//写
}
exit(EXIT_SUCCESS);
}
else if(child>0)//子进程1
{
char buf;
while(ftell(fp1)<size/2)//读取文件一般大小就停止
{
fread(&buf,1,1,fp1);//读
fwrite(&buf,1,1,fp2);//写
}
exit(EXIT_SUCCESS);
}
}
else if(father>0)
{
wait(NULL);
wait(NULL);
}
fclose(fp1);
fclose(fp2);
return 0;
}
偶数大小
奇数大小