学习IO的第五天

作业 :使用两个线程完成文件的拷贝写入,分线程1写入前半段,分线程2写入后半段,主线程用来回收资源

#include <head.h>void *sork(void *arg);
void *sork2(void *arg);int file_copy(int start,int len)   //拷贝的函数
{int rd = -1;int wd = -1;if((rd = open("./01_test.c",O_RDONLY)) == -1){printf("open_r error\n");}if((wd = open("./text.txt",O_WRONLY)) == -1){printf("open_w error\n");}lseek(rd,start,SEEK_SET);lseek(wd,start,SEEK_SET);char buf[128]="";int count = 0;while(1){int res = read(rd,buf,sizeof(buf));count += res;if(count >= len || res == 0){write(wd,buf,res-(count-len));break;}write(wd,buf,res);}close(rd);close(wd);}int length()
{int rd = -1;int wd = -1;if((rd = open("./01_test.c",O_RDONLY)) == -1){perror("open_r error\n");return -1;}if((wd = open("./text.txt",O_WRONLY|O_CREAT|O_TRUNC,0664) == -1)){perror("open_w error\n");return -1;}int len = lseek(rd,0,SEEK_END);close(rd);close(wd);return len;
}int main(int argc, const char *argv[])
{pthread_t tid = -1;pthread_t tid2 = -1;int len = length();   //获取文件大小if(pthread_create(&tid, NULL, sork, &len) != 0) //创建线程1{printf("创建线程失败\n");return -1;}if(pthread_create(&tid2, NULL, sork2, &len) != 0) //创建线程2{printf("创建线程失败\n");return -1;}pthread_join(tid,NULL);pthread_join(tid2,NULL);printf("已回收分线程资源\n");return 0;
}void *sork(void *arg)  //分支线程1
{int len = *(int *)arg;   file_copy(0,len/2);   //调用拷贝的函数printf("分支线程1退出\n");pthread_exit(NULL);
}void *sork2(void *arg)  //分支线程2
{int len = *(int *)arg;file_copy(len/2,len-len/2);   //调用拷贝的函数printf("分支线程2退出\n");pthread_exit(NULL);
}

结果

不调函数,一样

#include <head.h>void *sork(void *arg);
void *sork2(void *arg);int length()
{int rd = -1;int wd = -1;if((rd = open("./01_test.c",O_RDONLY)) == -1){perror("open_r error\n");return -1;}if((wd = open("./text.txt",O_WRONLY|O_CREAT|O_TRUNC,0664) == -1)){perror("open_w error\n");return -1;}int len = lseek(rd,0,SEEK_END);close(rd);close(wd);return len;
}int main(int argc, const char *argv[])
{pthread_t tid = -1;pthread_t tid2 = -1;int len = length();if(pthread_create(&tid, NULL, sork, &len) != 0) //创建线程1{printf("创建线程失败\n");return -1;}if(pthread_create(&tid2, NULL, sork2, &len) != 0) //创建线程2{printf("创建线程失败\n");return -1;}pthread_join(tid,NULL);pthread_join(tid2,NULL);return 0;
}void *sork(void *arg)  //分支线程1
{int len = *(int *)arg;int rd = -1;int wd = -1;printf("进入分支线程1\n");if((rd = open("./01_test.c",O_RDONLY)) == -1){printf("open_r error\n");}if((wd = open("./text.txt",O_WRONLY)) == -1){printf("open_w error\n");}lseek(rd,0,SEEK_SET);lseek(wd,0,SEEK_SET);char buf[128]="";int count = 0;while(1){int res = read(rd,buf,sizeof(buf));count += res;if(count >= len/2 || res == 0){write(wd,buf,res-(count-len/2));break;}write(wd,buf,res);}close(rd);close(wd);pthread_exit(NULL);
}void *sork2(void *arg)  //分支线程2
{int len = *(int *)arg;int rd = -1;int wd = -1;printf("进入分支线程2\n");if((rd = open("./01_test.c",O_RDONLY)) == -1){printf("open_r error\n");}if((wd = open("./text.txt",O_WRONLY)) == -1){printf("open_w error\n");}lseek(rd,len/2,SEEK_SET);lseek(wd,len/2,SEEK_SET);char buf[128]="";int count = 0;while(1){int res = read(rd,buf,sizeof(buf));if(res == 0){break;}write(wd,buf,res);}close(rd);close(wd);pthread_exit(NULL);}

思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux_vi/vim编辑器

3.VI 与 VIM 3.1概述 vi编辑器&#xff1a;是Linux和Unix上最基本的文本编辑器&#xff0c;工作在字符模式下。由于不需要图形界面&#xff0c;vi是效率很高的文本编辑器。 vim是&#xff1a;vi的增强版&#xff0c;比vi更容易使用。vi的命令几乎全部都可以在vim上使用。 3…

Qt图形设计

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置//设置窗口标题this->setWindowTitle("王者荣耀");//设置窗口图标this->setWindowIcon(QIcon("C:\\Users\\28033\\Pictures\\Saved Pictures\\pict…

ESP32单片机案例

工具&#xff1a;VScode PlatformIO IDE 注&#xff1a;B站视频学习笔记。 1、继电器 1&#xff09;硬件电路 2&#xff09;程序 #include <Arduino.h> #define RELAY_PIN 15//初始化定时器 hw_timer_t *timer NULL;void timer_interrupt(){ //将引脚传入的电平信号…

公众号word文档

在数字化时代&#xff0c;信息的快速获取和高效整理变得尤为重要。微信公众号作为信息传播的重要平台&#xff0c;其内容经常需要被转换成更易于编辑和存档的格式&#xff0c;如Word文档。这里&#xff0c;我们将介绍如何利用“微附件”小程序实现这一过程&#xff0c;并分享一…

第二十一章

网络通信这一章 基本分为三个部分 网络基础概念和TCP,UDP这三个部分主要如下&#xff1a; 计算机网络实现了堕胎计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xf…

mixamo根动画导入UE5问题:滑铲

最近想做一个跑酷游戏&#xff0c;从mixamo下载滑铲动作后&#xff0c;出了很多动画的问题。花了两周时间&#xff0c;终于是把所有的问题基本上都解决了。 常见问题&#xff1a; 1.【动画序列】人物不移动。 2.【动画序列】人物移动朝向错误。 3.【蒙太奇】人物移动后会被拉回…

谈谈 .NET8 平台中对 LiteDB 的 CRUD 操作

哪个啥&#xff01;纯 C# 编写的 LiteDB 你还不会操作&#xff1f; LiteDB 简介LiteDB 安装1、同步版 LiteDB2、异步版 LiteDB.Async LiteDB StudioLiteDB CRUD 操作举例1、.net cli 命令创建项目2、项目添加相关 nuget 包3、改造项目结构4、改造项目代码 LiteDB vs SQLite 对比…

MySQl int(1)、int(20) 的区别到底在哪里

MySQl int(1)、int(20) 的区别到底在哪里 常思一二&#xff0c;便得自然… int(1)数据类型介绍 在MySQL中&#xff0c;INT(1) 是一种定义整数类型的数据字段&#xff0c;其中的数字表示显示宽度而不是存储范围。具体说&#xff0c;INT(1) 中的数字 1 表示显示宽度&#xff0…

高级搜索——ST表,离线RMQ问题

文章目录 前言可重复贡献问题ST表的定义ST表的存储结构ST表的预处理预处理的实现 ST表的区间查询对于k的获取区间查询的实现 OJ链接 前言 对于查询区间最值的方法&#xff0c;我们常用的就是线段树&#xff0c;树状数组&#xff0c;单调队列&#xff0c;而树状数组更适合用于快…

【互斥锁不当使用导致的条件竞争】2021_DiceCTF_hashbrown

前言 这个题目还挺有意思的&#xff0c;他并不像之前做的题目直接给你一个贴脸的 UAF 等&#xff0c;而是把 UAF 放在了条件竞争的环境下&#xff0c;其实条件竞争这个漏洞在内核中经常出现。 这里题目没有去符号&#xff0c;所以逆向的难度不是很大&#xff0c;但作者似乎在…

Android蓝牙协议栈fluoride(二) - 软件框架

概述 fluoride 协议栈在整个软件框架中作为一个中间件的角色&#xff0c;向上对接APP&#xff0c;向下对接蓝牙芯片。fluoride采用C语言实现&#xff0c;与APP(Jave)通信采用JNI机制&#xff1b;与蓝牙芯片通信使用HCI硬件接口&#xff08;HCI软件协议参考蓝牙核心规范&#x…

毕设:《基于hive的音乐数据分析系统的设计与实现》

文章目录 环境启动一、爬取数据1.1、歌单信息1.2、每首歌前20条评论1.3、排行榜 二、搭建环境1.1、搭建JAVA1.2、配置hadoop1.3、配置Hadoop环境&#xff1a;YARN1.4、MYSQL1.5、HIVE(数据仓库)1.6、Sqoop&#xff08;关系数据库数据迁移&#xff09; 三、hadoop配置内存四、导…

FFA 2023 明日开幕,Flink 智能诊断、小红书流批一体实践精彩来袭

近年来&#xff0c;流批一体的技术思想势头火热&#xff0c;即“将批处理和流处理相结合&#xff0c;实现更好的数据处理能力”&#xff0c;已成功从理论层面走进现实世界。Flink 是一款高吞吐量、低延迟的流处理引擎&#xff0c;具备统一接口、高性能、低延迟、容错性和可扩展…

绑定域名简单教程

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 &#x1f324;️安装Nginx环境 &…

2024黑龙江省职业院校技能大赛信息安全管理与评估赛项规程

2024黑龙江省职业院校技能大赛暨国赛选拔赛 “GZ032信息安全管理与评估”赛项规程 极安云科专注技能竞赛&#xff0c;包含网络建设与运维和信息安全管理与评估两大赛项&#xff0c;及各大CTF&#xff0c;基于两大赛项提供全面的系统性培训&#xff0c;拥有完整的培训体系。团队…

【Qt开发流程】之元对象系统

描述 Qt的元对象系统&#xff08;Meta-Object System&#xff09;是Qt框架的核心机制之一&#xff0c;它提供了运行时类型信息&#xff08;RTTI&#xff09;和信号与槽&#xff08;Signals and Slots&#xff09;机制的支持。元对象系统在Qt中扮演了很重要的角色&#xff0c;它…

适合炎热天气的最佳葡萄酒有哪些?

每年的夏天&#xff0c;白葡萄酒和玫瑰红葡萄酒总会是葡萄酒爱好者的首选&#xff0c;这是为什么呢&#xff1f;随着春天的逝去&#xff0c;夏天悄悄地到来&#xff0c;空气变得炎热和沉重&#xff0c;树木变得越来越郁郁葱葱&#xff0c;白天的时间更长而晴朗了。多雨的五月变…

12.7作业

1. #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//***********窗口相关设置***********//设置窗体大小this->resize(540,410);this->setFixedSize(540,410);//取消菜单栏this->setWindowFlag(Qt::FramelessWindowHint);/…

SuperMap iObject.NET三维场景拖拽框选实现详解及完整源代码(一)——环境准备及项目配置

作者&#xff1a;超图研究院技术支持中心-于丁1 SuperMap iObject.NET三维场景拖拽框选实现详解及完整源代码&#xff08;一&#xff09;——环境准备及项目配置   三维场景框选是一种在三维空间中进行选择和操作的功能&#xff0c;它可以让使用者通过鼠标拖动来创建一个矩形…

Verilog学习 | 用initial语句写出固定的波形

initial beginia 0;ib 1;clk 0;#10ia 1; #20ib 0;#20ia 0; endalways #5 clk ~clk; 或者 initial clk 0;initial beginia 0;#10ia 1; #40ia 0; endinitial beginib 1;#30 ib 0; endalways #5 clk ~clk;