使用多进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程的资源
#include<myhead.h>
int main(int argc, const char *argv[])
{char str[100]="";puts("please input str:");//从终端读取字符串到strfgets(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;
}