1.
代码:
#include<myhead.h>
int main(int argc, const char *argv[])
{
FILE* fp=fopen("./test.c","r");
if(fp==NULL)
{
printf("fopen test.c error");
perror("fopen error");
return -1;
}
FILE* rfp=fopen("./test1.c","w");
if(rfp==NULL)
{
printf("fopen test1.c error");
perror("fopen error");
return -1;
}
char buf=0;
int count=0;
pid_t pid1 = -1;
//创建出一个子进程
pid1 = fork();
if(pid1 == 0)
{
printf("子进程1号\n");
while(1)
{
buf=fgetc(fp);
if(buf==EOF)
break;
count++;
}
fclose(fp);
fp=fopen("./test.c","r");
if(fp==NULL)
{
printf("fopen test.c error");
perror("fopen error");
return -1;
}
int a=0;
while(1)
{
if(a==count/2)
break;
buf=fgetc(fp);
a++;
fputc(buf,rfp);
}
exit(EXIT_SUCCESS);
}
else if(pid1 > 0)
{
//创建第二个子进程
pid_t pid2 = fork();
if(pid2 == 0) //第二个子进程
{
printf("子进程2号\n");
while(1)
{
buf=fgetc(fp);
if(buf==EOF)
break;
fputc(buf,rfp);
}
exit(EXIT_SUCCESS);
}
else if(pid2 > 0)
{
printf("父进程\n");
wait(NULL);
wait(NULL);
printf("全部回收完成\n");
}else
{
perror("fork error");
return -1;
}
}else
{
perror("fork error");
return -1;
}
fclose(fp);
fclose(rfp);
return 0;
}
运行结果: