【IO】多进程编程课后练习
1> 使用多进程完成两个文件的拷贝:父进程拷贝前一半内容,子进程拷贝后一半内容
同样的判断方法为什么上面不奏效下面奏效
#include <myhead.h>
int main(int argc, const char *argv[])
{pid_t pid=-1;int num=0;int fp1=-1;int fp2=-1;if((fp1=open(argv[1],O_RDWR|O_CREAT|O_TRUNC,0664))==-1){printf("打开文件失败\n");return -1;}if((fp2=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1){printf("打开文件失败\n");return -1;}char buf[128]="";int ret;printf("请输入文件1内容:\n");while(1){ret=read(0,buf,sizeof(buf));if(ret==1)break;write(fp1,buf,ret);}int len=lseek(fp1,0,SEEK_END);int half=len/2;lseek(fp1,0,SEEK_SET);int i=0;printf("%d\n",len);bzero(buf,sizeof(buf));pid=fork();if(pid>0){printf("父进程中:num = %d,pid=%d,cpid=%d,ppid=%d\n",num++,getpid(),pid,getppid());//sleep(1);//拷贝前一半lseek(fp1,0,SEEK_SET);while(i<half){ret=read(fp1,buf,sizeof(buf));write(fp2,buf,ret);i=i+ret;}printf("fu\n");sleep(6);waitpid(-1,NULL,WNOHANG);printf("已经成功为儿子收尸了\n");sleep(1);exit(EXIT_SUCCESS);}else if(pid==0){printf("子进程中:num = %d,pid=%d,ppid=%d\n",num+=3,getpid(),getppid());sleep(3);//拷贝后一半lseek(fp1,half,SEEK_SET);i=half;while(i<len){ret=read(fp1,buf,sizeof(buf));write(fp2,buf,ret);i+=ret;}printf("zi\n");sleep(1);exit(EXIT_SUCCESS);}close(fp1);close(fp2);return 0;
}
2>父进程创建两个子进程,子进程1负责拷贝文件前一半内容,子进程2负责拷贝文件后一半内容,父进程阻塞回收两个子进程资源
#include <myhead.h>
int main(int argc, const char *argv[])
{pid_t pid1=-1;pid_t pid2=-1;int fp1=-1;int fp2=-1;int num=0;if((fp1=open(argv[1],O_RDONLY))==-1){printf("打开文件失败\n");return -1;}if((fp2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0664))==-1){printf("打开文件失败\n");return -1;}char buf[128]="";int len=lseek(fp1,0,SEEK_END);//int half=len/2;lseek(fp1,0,SEEK_SET);int i=0,ret;printf("%d\n",len);pid1=fork();if(pid1>0){sleep(5);waitpid(pid1,NULL,0);sleep(5);waitpid(pid2,NULL,0);sleep(5);exit(EXIT_SUCCESS);}if(pid1==0){ //拷贝前一半while(i<len/2){ret=read(fp1,buf,sizeof(buf));write(fp2,buf,ret);i=i+ret;}exit(EXIT_SUCCESS);}if(pid2==0){//拷贝后一半lseek(fp1,len/2,SEEK_SET);i=len/2;while(i<len){ret=read(fp1,buf,sizeof(buf));write(fp2,buf,ret);i=i+ret;}exit(EXIT_SUCCESS);}close(fp1);close(fp2);return 0;
}
3> 将课堂代码熟练练习,深入理解多进程编程
4> 详细绘制思维导图
5> 牛客网刷题