使用多进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程的资源
#include<myhead.h>
int main(int argc, const char *argv[])
{
char str[100]="";
puts("please input str:");
//从终端读取字符串到str
fgets(str,sizeof(str),stdin);
str[strlen(str)-1]=0;
int plen=strlen(str)/2;//读取字符串的一半
FILE *fp=NULL;
FILE *fp1=NULL;//以写的形式打开这两个文件
if((fp=fopen("./test1.txt","w"))==NULL)
{
perror("test1 open error");
}
if((fp1=fopen("./test2.txt","w"))==NULL)
{
perror("test2 open error");
}
pid_t pid=-1;//创建子进程
pid=fork();
if(pid>0)//判断是否是父进程
{
for(int i=0;i<plen;i++)
{
fputc(str[i],fp);//将字符串前半个放入其中
}
fclose(fp);
char buf[20]="";
if((fp=fopen("./test1.txt","r"))==NULL)//写形式打开并且输出
{
perror("open error");
}
while(1)//输出
{
char *ptr=fgets(buf,sizeof(buf),fp);
if(ptr==NULL)
{
break;
}
printf("父:%s\n",buf);
}
fclose(fp);
}
else
{
for(int i=plen;i<strlen(str);i++)//写入文件
{
fputc(str[i],fp1);
}
fclose(fp1);
char buf[20]="";
if((fp1=fopen("./test2.txt","r"))==NULL)//只读形式打开
{
perror("open error");
}
while(1)
{
char *ptr=fgets(buf,sizeof(buf),fp1);//读取文件的内容并输出
if(ptr==NULL)
{
break;
}
printf("子:%s\n",buf);
}
fclose(fp1);
exit(EXIT_SUCCESS);
}
wait(NULL);//等进程结束
return 0;
}