学习IO的第五天

news/2024/11/15 1:32:12/

作业 :使用两个线程完成文件的拷贝写入,分线程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.ppmy.cn/news/1261316.html

相关文章

分数到小数

题目链接 分数到小数 题目描述 注意点 denominator ! 0对于所有给定的输入&#xff0c;保证 答案字符串的长度小于 10000如果小数部分为循环小数&#xff0c;则将循环的部分括在括号内 解答思路 本题关键是要找到循环小数的部分并将其两侧加上括号&#xff0c;模拟除法运算…

Echarts运用之饼状图常见问题及案例代码

前言 ECharts 是一个使用 JavaScript 实现的开源可视化库,它可以帮助用户以简单的方式创建复杂的时间序列、条形图、饼图、地图等图形。 初学者,可参考下我的另外两篇文章,从基础到深入,解读饼状图的运用。 ECharts初始案例(入门) ECharts之饼图 常见问题及案例代码 数…

数据清洗、特征工程和数据可视化、数据挖掘与建模的主要内容

1.4 数据清洗、特征工程和数据可视化、数据挖掘与建模的内容 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.4节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学…

人脸识别安卓主板_MTK方案智能闸机门禁工业安卓主板定制开发

人脸识别主板广泛应用于各个领域&#xff0c;包括人脸支付系统、人脸识别监控系统、写字楼办公楼门禁闸机、校园、地铁、住宅门禁、考勤机、智能门锁、广告机、售卖机等。 主板基于联发科MTK方案&#xff0c;并由行业PCBA和MTK的核心板组成。根据产品需求&#xff0c;可以选择…

node.js出现version `GLIBC_2.27‘ not found的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

流量分析1--菜刀666

1&#xff1a;菜刀666&#xff1a; 题目描述 分析流量包&#xff0c;过滤http数据流 追踪TCP数据流 对比第5个流和第7个流发现&#xff0c;同样的目录下 多出了6666.jpg。猜测是由攻击者上传&#xff0c;直接在请求包里搜索FFD8--FFD9 保存为1.jpg 利用foremost工具对1.jpg进…

Smart Link和Monitor Link

Smart Link和Monitor Link简介 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 Monitor Link是一种接口联动方案&#xff0c;它…

低多边形3D建模动画风格纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…