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

io-进程/线程--理论+实操

1、创建一个分支线程,在主线程中拷贝文件的前一部分,主线程拷贝文件的后一部分

#include <25051head.h>typedef struct{FILE* fp;FILE* fp1;int start_pos;int size;
}Args;//从指定位置开始复制指定大小的数据
void* callback(void* arg)
{Args* args=(Args*)arg;char buf[128]="";int n=args->size;// 设置文件指针到起始位置fseek(args->fp,0,SEEK_SET);                                          fseek(args->fp1,0,SEEK_SET);while(n>0){size_t res=fread(buf,1,(n<sizeof(buf))? n:sizeof(buf),fp);if(res<=0){break;}
// 使用实际读取的字节数进行写入fwrite(buf,1,res,fp1);n-=res;} printf("前半段打印完成\n");pthread_exit(NULL);
}int main(int argc, const char *argv[])
{FILE* fp=fopen("my.txt","r");if(NULL==fp){ERRLOG("fopen error..\n");}// 获取文件大小fseek(fp,0,SEEK_END);int num=ftell(fp);int n=num/2;FILE* fp1=fopen("my1.txt","w+");if(NULL==fp1){ERRLOG("fopen error..\n");                              }char buf[128]="";// 创建线程参数(前半部分)//  ThreadArgs args = {fp, fp1, 0, n};pthread_t threadid;if(0 != (errno= pthread_create(&threadid,NULL,callback,&args))){perror("创建线程失败");fclose(fp);fclose(fp1);pthread_exit(NULL);}// 主线程处理后半部分
// 等待子线程完成前半部分的复制pthread_join(thread, NULL);fseek(fp,n,SEEK_SET);fseek(fp1,n,SEEK_SET);int n1=num-n;char buf[128]="";while(n1>0){size_t res=fread(buf,1,(n1<sizeof(buf))? n1:sizeof(buf),fp);if(res<=0){break;}fwrite(buf,1,n1,fp1);n1-=res;//exit(0);}printf("后半段打印完成\n");// 关闭文件fclose(fp);fclose(fp1);printf("文件复制完成\n");return 0;
}

2、解读代码

输出结果:
info1 from child process_1
info1 from child process_2
info1 from parent process

3、解读代码, - 打印多少次

打印14次

思维导图

http://www.dtcms.com/a/265356.html

相关文章:

  • 旋量理论与运动旋量计算:Sympy中的数学实现与物理内涵
  • 实验室超算替代方案:AMD EPYC 双路高性能工作站,预装全套科研软件 配置科研环境3天拿到全套已优化工作站
  • leetcode 3304. 找出第 K 个字符 I 简单
  • 【Java工程师面试全攻略】Day10:系统性能优化全链路实践
  • AI时代SEO关键词策略
  • 异步Websocket构建聊天室
  • mac init tailwind css 配置文件报错
  • STM32-PWM驱动无源蜂鸣器
  • uniapp中使用组件分包
  • 在Linux服务器上使用kvm创建虚拟机
  • Springboot3.3.4使用spring-data-elasticsearch整合Elasticsearch7.12.1
  • 【Linux仓库】进程优先级及进程调度【进程·肆】
  • vue-38(使用 Cypress 进行端到端测试)
  • 基于微信小程序的学校招生系统
  • 破解风电运维“百模大战”困局,机械版ChatGPT诞生?
  • 第8章网络协议-NAT
  • 机器学习在智能能源管理中的应用:需求响应与可再生能源整合
  • Google Maps 安装使用教程
  • 六、软件操作手册
  • 按月设置索引名的完整指南:Elasticsearch日期索引实践
  • 第五章 局域网基础
  • Spark流水线数据探查组件
  • 部署KVM虚拟化平台
  • odoo17 警示: selection attribute will be ignored as the field is related
  • centos7下源码编译ffmpeg时报错ERROR opus not found using pkg-config问题修复
  • 全角半角空格在网页中占位符和编码emsp;ensp;
  • 网络协议概念与应用层
  • 深度解析Elasticsearch滚动索引:原理、实践与自动化管理
  • Spring cloud gateway
  • C++2d我的世界V1.4