当前位置: 首页 > backend >正文

【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> 牛客网刷题

http://www.xdnf.cn/news/19717.html

相关文章:

  • 单多行文本溢出
  • Selenium核心技巧:元素定位与等待策略
  • ArkUI核心功能组件使用
  • 【线段树】3525. 求出数组的 X 值 II|2645
  • Spring 事务原理解析:AOP 的一次完美落地
  • 深度学习——基于卷积神经网络实现食物图像分类【4】(使用最优模型)
  • 广度优先搜索(BFS, Breadth-First Search)
  • 数字化转型的六大天问:你的项目为何失败
  • 数据开发工作了一年,准备跳槽,回顾一些面试常见问题,大数据面试题汇总与答案分享
  • 【3D打印】3D打印机首次使用心得
  • 2025最新“Java 面试八股文 + 各大厂的面试真题”限时开源
  • 人工智能助力流感疫苗选择:MIT 团队推出 VaxSeer 系统
  • Understanding the Flap T in American English
  • 开源企业级快速开发平台(JeecgBoot)
  • Python闭包机制:原理、应用与安全防护
  • 【Doris入门】Doris数据表模型:聚合模型(Aggregate Key Model)详解
  • java-设计模式-4-创建型模式-工厂
  • 【52页PPT】服务业数字化转型如何做(附下载方式)
  • Ubuntu 用户和用户组
  • X86、X64 与 ARM:架构的剖析与比较
  • webpack性能优化指南
  • MacOS - 记录MacOS发烫的好几天 - 幕后黑手竟然是
  • 神经网络|(十八)概率论基础知识-伽马函数溯源-阶乘的积分表达式
  • k8s常用命令
  • 对矩阵行化简操作几何含义的理解
  • HDI是什么?与普通线路板有何区别?优势在哪?
  • 嵌入式git分支管理策略
  • Java基础第9天总结(可变参数、Collections、斗地主)
  • 魔域服务器多少钱一个月?魔域服务器配置要求及推荐
  • Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十四天