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

10.17 多进程编程

作业:使用父子进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,两个进程同时进行

代码实现:

#include <myhead.h>
void copy_file(const char *src,const char *dest,int start,int end){int fd_src=open(src,O_RDONLY);if(fd_src==-1){perror("open error");return ;}int fd_dest=open(dest,O_WRONLY);if(fd_dest==-1){perror("open error");return ;}lseek(fd_src,start,SEEK_SET);lseek(fd_dest,start,SEEK_SET);char buf[30];int sum=0;while(1){int res=read(fd_src,buf,sizeof(buf));sum+=res;if(sum>=end){write(fd_dest,buf,res-(sum-end));break;}write(fd_dest,buf,res);}close(fd_src);close(fd_dest);}
int get_len(const char *src,const char *dest){int fd_src=open(src,O_RDONLY);if(fd_src==-1){perror("open error");return -1;}int fd_dest=open(dest,O_WRONLY|O_CREAT|O_TRUNC,0664);if(fd_dest==-1){perror("open error");return -1;}int len=lseek(fd_src,0,SEEK_END);close(fd_src);close(fd_dest);return len;
}
int main(int argc, const char *argv[])
{int len=get_len(argv[1],argv[2]);//获取读文件长度和创建写文件pid_t pid=fork();//创建子进程if(pid>0){//父进程拷贝文件前半部分copy_file(argv[1],argv[2],0,len/2);}else if(pid==0){//子进程拷贝文件后半部分copy_file(argv[1],argv[2],len/2,len-len/2);exit(EXIT_SUCCESS);}else{perror("fork error");return -1;}waitpid(-1,NULL,0);//阻塞等待回收子进程资源return 0;
}

 结果:

思维导图

 


http://www.mrgr.cn/news/55954.html

相关文章:

  • nuScenes数据集使用的相机的外参和内参
  • PostgreSQL模板数据库template0和template1的异同点
  • TDengine 与北微传感达成合作,解决传统数据库性能瓶颈
  • CRC-校验
  • GRPC 压缩算法
  • 【MR开发】在Pico设备上接入MRTK3(一)——在Unity工程中导入MRTK3依赖
  • 2024年9月青少年软件编程Python等级考试(一级)真题试卷及答案
  • 离线安装lrzsz
  • 代购系统搭建涉及到哪几方面❓
  • 电子便签:从偶像剧到职场的实用转变
  • 认识ldconfig,不仅仅可以用于查看库的版本
  • 使用Selenium爬取图片并保存为Excel:完整教程
  • 哪个牌子的台灯性价比高?五款性价比拉满的护眼台灯推荐
  • Thymeleaf模板引擎教程(详细总结)
  • Redis进阶:Spring框架中利用Redis实现对象的序列化存储
  • 华为员工爆料:朋友怀孕被裁,直接赔偿了82W!我真有点“羡慕”了。网友:“这算啥,我还见过更绝的!”
  • Node-RED开源项目的modbus通信(TCP)
  • Maven - Assembly实战
  • 【3D】几何算法合集2(自用资源)方便cv
  • 04_Pandas高级操作(上)
  • 【Docker】在AlmaLinux 8.10系统中安装Docker-ce过程分享
  • 自学网络安全?一般人我还是劝你算了吧
  • Tkinter中grid设置位置
  • 创建 RpcThreadPoolUtil 工具类
  • 基于Consul的 Redis 多实例监控方案
  • 【Dv2Admin】软删除的修改与恢复