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

学习IO的第四天

作业 :  使用两个子进程完成两个文件的拷贝,子进程1拷贝前一半内容,子进程2拷贝后一般内容,父进程用于回收两个子进程的资源

#include <head.h>int main(int argc, const char *argv[])
{int rd = -1;if((rd=open("./01_test.c",O_RDONLY))==-1)  //打开一个文件以只读的方式{perror("open error\n");return -1;}int wd = -1;                          //以写的方式打开一个文件,若文件不存在则创建,存在则清空if((wd=open("./text.txt",O_WRONLY|O_CREAT|O_TRUNC, 0664))==-1){perror("write error\n");return -1;}char res[128]="";               //定义一个字符串当中转站int seek = lseek(rd,0,SEEK_END);   //定义seek获取文件内容的大小,lseek函数的返回值是文件的大小int count = 0;                 //定义count来接收read的返回值int pid = fork();              //创建子进程if(pid > 0)                    //如果pid大于0则为父进程  {//父进程//回收子进程的资源wait(NULL);wait(NULL);int pid2 = fork();         //在父进程中再创建子进程if(pid2>0)  //父进程{ }else if(pid2 == 0)    //再次创建的子进程{//子2进程			lseek(rd,0,SEEK_SET);   //将光标偏移到文件开头while(1){if(seek/2 == lseek(rd,0,SEEK_CUR)) //如果文件偏移到文件中间,则跳出循环{break;}count=read(rd,res,sizeof(res));   //读写文件write(wd,res,count);}exit(EXIT_SUCCESS);             //退出子进程}else{perror("pids error\n");return -1;}}else if(pid == 0)  //子2进程{ //休眠1秒等另一个进程拷贝完毕sleep(1);//光标移动到文件中央lseek(rd, 0, SEEK_CUR);while(1){if(count==0)   //如果read的返回值为0,说明文件读取完毕,跳出循环{break;}count = read(rd,res,sizeof(res));  //读写文件write(wd,res,count);}exit(EXIT_SUCCESS);    //退出子进程} else{perror("pidx error\n");return -1;}printf("拷贝完成\n");close(wd);close(rd);return 0;  
}

思维导图

http://www.lryc.cn/news/255046.html

相关文章:

  • Linux:缓冲区的概念理解
  • 中山大学李华山、王彪课题组开发 SEN 机器学习模型,高精度预测材料性能
  • 二百一十、Hive——Flume采集的JSON数据文件写入Hive的ODS层表后字段的数据残缺
  • 【开放集检测OSR】开放集检测和闭集检测的区别和联系:从模型角度进行理解
  • 【Flink】Flink核心概念简述
  • linux-tar命令、解压、压缩
  • Kafka Connect :构建强大分布式数据集成方案
  • 基于 Flink CDC 构建 MySQL 的 Streaming ETL to MySQL
  • 创建vue项目:node.js下载安装、配置环境变量,下载安装cnpm,配置npm的目录、镜像,安装vue、搭建vue项目开发环境(保姆级教程一)
  • uni-app 微信小程序之好看的ui登录页面(一)
  • [ES]ElasticSearch强转日期的时区问题
  • YOLOv5结合BiFPN,如何替换YOLOv5的Neck实现更强的检测能力?
  • 3.PyTorch——常用神经网络层
  • 状态机的练习:按键控制led灯
  • 看图学源码之 CopyOnWriteArraySet源码分析
  • almaLinux centos8 下载ffmpeg离线安装包、离线安装
  • CSS3 属性: transition过渡 与 transform动画
  • TCP通讯
  • (NeRF学习)3D Gaussian Splatting Instant-NGP
  • uni-app 微信小程序之好看的ui登录页面(三)
  • Android 默认打开应用的权限
  • 2023年广东工业大学腾讯杯新生程序设计竞赛
  • FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
  • SpringCloud | Dubbo 微服务实战——注册中心详解
  • PostGIS学习教程十一:投影数据
  • jQuery ajax读取本地json文件 三级联动下拉框
  • Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版(视频笔记)
  • 深度学习实战66-基于计算机视觉的自动驾驶技术,利用YOLOP模型实现车辆区域检测框、可行驶区域和车道线分割图
  • Stable Diffusion 系列教程 - 1 基础准备(针对新手)
  • 听GPT 讲Rust源代码--src/tools(8)