IOday7作业

1> 使用无名管道完成父子进程间的通信

#include<myhead.h>int main(int argc, const char *argv[])
{//创建存放两个文件描述符的数组int fd[2];int pid = -1;//打开无名管道if(pipe(fd) == -1){perror("pipe");return -1;}//创建子进程pid = fork();if(pid > 0){//父进程//关闭读端close(fd[0]);char buf[128]="";while(1){printf("请输入:");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = 0;write(fd[1],buf,strlen(buf));if(strcmp(buf,"quit") == 0){break;}}close(fd[1]);}else if(pid == 0){//子进程close(fd[1]);char buf[128]="";while(1){bzero(buf,sizeof(buf));read(fd[0],buf,sizeof(buf));printf("输出是:%s\n",buf);if(strcmp(buf,"quit") == 0){break;}}close(fd[0]);}else{perror("fork");return -1;}wait(NULL);return 0;
}

 效果图:

2> 使用标准IO完成两个文件的拷贝

#include<myhead.h>int main(int argc, const char *argv[])
{FILE* rfile;FILE* wfile;if((rfile = fopen("./01test.c","r")) == NULL){perror("fopen");return -1;}if((wfile = fopen("./02test.txt","w")) == NULL){perror("fopen");return -1;}char buf[128]="";int res = 0;while(1){res = fread(buf,1,sizeof(buf),rfile);if(res == 0 || res == -1){break;}fwrite(buf,res,1,wfile);}fclose(rfile);fclose(wfile);return 0;
}

 效果图:

3> 使用文件IO实现两个文件的拷贝

#include<myhead.h>int main(int argc, const char *argv[])
{pid_t rpid = -1;pid_t wpid = -1;if((rpid = open("./01test.c",O_RDONLY))==-1){perror("open");return -1;}if((wpid = open("./03test.txt",O_WRONLY | O_CREAT | O_TRUNC,0664))==-1){perror("open");return -1;}char buf[128]="";int res = 0;while(1){bzero(buf,sizeof(buf));res = read(rpid,buf,sizeof(buf));if(res == 0||res == -1){break;}write(wpid,buf,res);}close(rpid);close(wpid);return 0;
}

 效果图:

4> 使用多进程完成两个文件的拷贝

#include<myhead.h>int main(int argc, const char *argv[])
{pid_t pid = -1;int rfd = -1;int wfd = -1;if((rfd = open("./01test.c",O_RDONLY))==-1){perror("open");return -1;}if((wfd = open("./04test.txt",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1){perror("open");return -1;}int len = lseek(rfd,0,SEEK_END);pid = fork();if(pid > 0){	lseek(rfd,0,SEEK_SET);lseek(wfd,0,SEEK_SET);char buf[128]="";int res = -1;int num = 0;while(1){	res = read(rfd,buf,sizeof(buf));num += res;if(num > len/2||res == 0){write(wfd,buf,res-(num-len/2));break;}write(wfd,buf,res);}close(rfd);close(wfd);wait(NULL);}else if(pid == 0){lseek(rfd,len/2,SEEK_SET);lseek(wfd,len/2,SEEK_SET);char buf[128]="";int res = -1;int num = 0;while(1){	res = read(rfd,buf,sizeof(buf));num += res;if(num > (len-len/2) || res == 0){write(wfd,buf,res-(num-len/2));break;}write(wfd,buf,res);}close(rfd);close(wfd);exit(EXIT_SUCCESS);}else{perror("fork");return -1;}return 0;
}

 效果图:

5> 使用多线程完成两个文件的拷贝

#include<myhead.h>
typedef struct
{const char* srcfile;const char* destfile;int place;int offset;
}arg;void* read_file(void* aarg)
{arg ofile=*((arg*)aarg);printf(" %s %s %d %d\n",ofile.srcfile,ofile.destfile,ofile.place,ofile.offset);int  rfd = -1;int  wfd = -1;if((rfd = open(ofile.srcfile,O_RDONLY))==-1){perror("open");pthread_exit(NULL);}if((wfd = open(ofile.destfile,O_WRONLY|O_CREAT,0664))==-1){perror("open");pthread_exit(NULL);}lseek(rfd,ofile.place,SEEK_SET);lseek(wfd,ofile.place,SEEK_SET);char buf[128]="";int res = 0;int num = 0;while(1){bzero(buf,sizeof(buf));res = read(rfd,buf,sizeof(buf));num += res;if(num >= ofile.offset||res == 0){write(wfd,buf,res-(num-ofile.offset));break;}write(wfd,buf,res);}		close(rfd);close(wfd);pthread_exit(NULL);}int main(int argc, const char *argv[])
{pthread_t rtid = -1;pthread_t wtid = -1;pid_t fd = -1;if((fd = open(argv[1],O_RDONLY))==-1){perror("open");return -1;}int len = lseek(fd,0,SEEK_END);close(fd);arg ofile_information={argv[1],argv[2],0,len/2};if((pthread_create(&rtid,NULL,read_file,&ofile_information)) != 0){perror("pthread_creat");return -1;}arg tfile_information={argv[1],argv[2],len/2,len-(len/2)};if((pthread_create(&wtid,NULL,read_file,&tfile_information)) != 0){perror("pthread_creat");return -1;}pthread_join(rtid,NULL);pthread_join(wtid,NULL);return 0;
}

 

效果图:

6> 将互斥锁的案例重新写一遍

#include<myhead.h>pthread_mutex_t mutex;
int money = 5000;void* cost(void* arg)
{while(1){pthread_mutex_lock(&mutex);money -= 50; printf("小王花了50,还剩%d\n",money);pthread_mutex_unlock(&mutex);sleep(1);}pthread_exit(NULL);
}int main(int argc, const char *argv[])
{pthread_t tid;//初始化pthread_mutex_init(&mutex,NULL);if(pthread_create(&tid,NULL,cost,NULL) != 0){perror("pthread_create");return -1;}//上锁while(1){sleep(1);pthread_mutex_lock(&mutex);money -= 100;printf("小张花了100,还剩:%d\n",money);pthread_mutex_unlock(&mutex);}pthread_mutex_destroy(&mutex);pthread_join(tid,NULL);return 0;
}

 效果图:

7> 将无名信号量实现生产者消费者程序重新实现一遍

#include<myhead.h>sem_t sem;void* task1(void* arg)
{while(1){printf("我生产了\n");sem_post(&sem);sleep(1);}pthread_exit(NULL);
}void* task2(void* arg)
{while(1){sem_wait(&sem);printf("我消费了\n");//sem_post(&sem);sleep(1);}pthread_exit(NULL);
}int main(int argc, const char *argv[])
{pthread_t tid1;pthread_t tid2;//初始化sem_init(&sem,0,0);if(pthread_create(&tid1,NULL,task1,NULL) != 0){perror("pthread_create");return -1;}if(pthread_create(&tid2,NULL,task2,NULL) != 0){perror("pthread_create");return -1;}sem_destroy(&sem);pthread_join(tid1,NULL);pthread_join(tid2,NULL);return 0;
}

效果图:

8> 将条件变量实现生产者消费者程序重新实现一遍

#include<myhead.h>pthread_cond_t cond;
pthread_mutex_t mutex;void* task1(void* arg)
{while(1){printf("生产了一个\n");pthread_cond_signal(&cond);sleep(1);}
}void* task2(void* arg)
{while(1){pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);printf("%#lx消费了一个\n",pthread_self());pthread_mutex_unlock(&mutex);sleep(1);}
}int main(int argc, const char *argv[])
{pthread_t tid1,tid2,tid3,tid4,tid5,tid6;//初始化pthread_cond_init(&cond,NULL);pthread_mutex_init(&mutex,NULL);//生产线if(pthread_create(&tid1,NULL,task1,NULL) != 0){perror("pthread_create");return -1;}//消费线if(pthread_create(&tid2,NULL,task2,NULL) != 0){perror("pthread_create");return -1;}if(pthread_create(&tid3,NULL,task2,NULL) != 0){perror("pthread_create");return -1;}if(pthread_create(&tid4,NULL,task2,NULL) != 0){perror("pthread_create");return -1;}if(pthread_create(&tid5,NULL,task2,NULL) != 0){perror("pthread_create");return -1;}if(pthread_create(&tid6,NULL,task2,NULL) != 0){perror("pthread_create");return -1;}pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_join(tid3,NULL);pthread_join(tid4,NULL);pthread_join(tid5,NULL);pthread_join(tid6,NULL);pthread_cond_destroy(&cond);pthread_mutex_destroy(&mutex);return 0;
}

效果图:

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

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

相关文章

wordpress小记

1.插件市场搜索redis&#xff0c;并按照 Redis Object cache插件 2.开启php的redis扩展 执行php -m|grep redis&#xff0c;没有显示就执行 yum -y install php-redis3.再次修改wp配置文件&#xff0c;增加redis的配置 define( WP_REDIS_HOST, 114.80.36.124 );define( WP_…

非标设计之电磁阀

电磁阀&#xff1a; 分类&#xff1a; 动画演示两位三通电磁阀&#xff1a; 两位三通电磁阀动画演示&#xff1a; 111&#xff1a; 气缸回路的介绍&#xff1a; 失电状态&#xff1a; 电磁阀得电状态&#xff1a; 两位五通电磁阀的回路&#xff1a;&#xff08;常用&#xf…

算数运算符和算数表达式

基本算数运算符 算数运算符&#xff1a; &#xff08;加法运算符或正值运算符&#xff09;、-&#xff08;减法运算符或负值运算符&#xff09;、*&#xff08;乘&#xff09;、/&#xff08;除&#xff09;、%&#xff08;求余数&#xff09; 双目运算符&#xff1a; 双目…

四则运算 .

输入一个表达式&#xff08;用字符串表示&#xff09;&#xff0c;求这个表达式的值。 保证字符串中的有效字符包括[‘0’-‘9’],‘’,‘-’, ‘*’,‘/’ ,‘(’&#xff0c; ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。字符串长度满足1≤n≤1000 输入描述&#x…

CGAL的2D符合规定的三角剖分和网格

1、符合规定的三角剖分 1.1、定义 如果三角形的任何面的外接圆在其内部不包含顶点&#xff0c;则该三角形是 Delaunay 三角形。 约束 Delaunay 三角形是一种尽可能接近 Delaunay 的约束三角形。 约束 Delaunay 三角形的任何面的外接圆在其内部不包含从该面可见的数据点。 如果…

陀螺仪LSM6DSV16X与AI集成(3)----读取融合算法输出的四元数

陀螺仪LSM6DSV16X与AI集成.2--姿态解算 概述视频教学样品申请完整代码下载使用demo板生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始化SFLP步骤初始化SFLP读取四元数数据演示 概述 LSM6DSV16X 特性涉及到的是一种低功耗的传感器融合算法&#xff08;Sensor…

MySQL之创建时间类型的字段表

mysql之创建时间类型的字段表 CREATE TABLE tab(birthday DATE, -- 生日job_time DATETIME, -- 记录年月日时分秒login_time TIMESTAMP -- 时间戳NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP )解释&#xff1a; NOT NULL DEFAULT &#xff1a;默认不为空…

css未来:使用light-dark()切换主题色

css未来&#xff1a;使用light-dark()切换主题色 要根据使用的是浅色模式还是深色模式来更改颜色&#xff0c;我们通常会使用 prefers-color-scheme 媒体查询。为了让代码实现变得更容易&#xff0c;CSS 现在附带了一个名为 light-dark() 的实用函数。该函数接受两个颜色值作为…

编译原理lab3-cminus_compiler-LLVM简要熟悉

lab3实验报告&#xff0c;我的实验报告图例很少&#xff0c;这次只有两张图&#xff0c;其余的都以复制输出的形式展现出来了&#xff0c;最终提交的代码在最后 [[#你的提交|你的提交]][[#实验设计|实验设计]][[#提交一&#xff1a;手动编写.ll|提交一&#xff1a;手动编写.ll…

TREK610C高压放大器

181/2461/8938技术规格 输出电压&#xff1a;0到10 kV直流电压 输出电流&#xff1a;0到2 mA 转换率&#xff1a;大于500 V/μs 信号带宽&#xff1a;直流到1.0 kHz &#xff08;-3dB&#xff09; 放大倍数&#xff1a;1000 V/V 闭环系统以保持低噪音、高精确度电压输出 短…

最简单的基于 FFmpeg 的音频解码器

最简单的基于 FFmpeg 的音频解码器 最简单的基于 FFmpeg 的音频解码器正文参考工程文件下载 参考雷霄骅博士的文章&#xff0c;链接&#xff1a;最简单的基于FFMPEGSDL的音频播放器&#xff1a;拆分-解码器和播放器 最简单的基于 FFmpeg 的音频解码器 正文 FFmpeg 音频解码器…

【ArcGIS微课1000例】0080:ArcGIS将shp转json(geojson)案例教程

本文以案例的形式,讲述在ArcGIS软件中,将矢量数据转为GeoJSON的方法。 扩展阅读:【GIS风暴】GeoJSON数据格式案例全解 文章目录 一、GeoJson简介二、ArcGIS将矢量数据转为GeoJSON一、GeoJson简介 GeoJSON是一种基于JSON的地理空间数据交换格式,它定义了几种类型JSON对象以…

Spring Cloud Gateway 网关的基础使用

1. 什么是网关&#xff1f;网关有什么用&#xff1f; 在微服务架构中&#xff0c;网关就是一个提供统一访问地址的组件&#xff0c;它解决了内部微服务与外部的交互问题。网关主要负责流量的路由和转发&#xff0c;将外部请求引到对应的微服务实例上。同时提供身份认证、授权、…

Spring-Boot---配置文件

文章目录 配置文件的作用配置文件的格式PropertiesProperties基本语法读取Properties配置文件 ymlyml基本语法读取yml配置文件 Properties VS Yml 配置文件的作用 整个项目中所有重要的数据都是在配置文件中配置的&#xff0c;具有非常重要的作用。比如&#xff1a; 数据库的…

230. 二叉搜索树中第K小的元素 --力扣 --JAVA

题目 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 解题思路 利用List存储数据&#xff1b;遍历整个树&#xff0c;读取数各个节点的value&#xff1b;对value进行…

Python绘制多分类ROC曲线

目录 1 数据集介绍 1.1 数据集简介 1.2 数据预处理 2随机森林分类 2.1 数据加载 2.2 参数寻优 2.3 模型训练与评估 3 绘制十分类ROC曲线 第一步&#xff0c;计算每个分类的预测结果概率 第二步&#xff0c;画图数据准备 第三步&#xff0c;绘制十分类ROC曲线 1 数据集…

【数据结构】——排序篇(上)

前言&#xff1a;前面我们已经学过了许许多多的排序方法&#xff0c;如冒泡排序&#xff0c;选择排序&#xff0c;堆排序等等&#xff0c;那么我们就来将排序的方法总结一下。 我们的排序方法包括以下几种&#xff0c;而快速排序和归并排序我们后面进行详细的讲解。 直接插入…

Qt实现二维码生成和识别

一、简介 QZxing开源库: 生成和识别条码和二维码 下载地址&#xff1a;https://gitcode.com/mirrors/ftylitak/qzxing/tree/master 二、编译与使用 1.下载并解压&#xff0c;解压之后如图所示 2.编译 打开src目录下的QZXing.pro&#xff0c;选择合适的编译器进行编译 最后生…

util.js

一、util.js是什么&#xff1f; 1、util.js是Node.js提供的一个工具库&#xff0c;主要用于辅助实现JavaScript代码的通用功能。 2、除了Node.js中内置的模块外&#xff0c;util.js是Node.js中最核心的模块之一。 3、通过util.js&#xff0c;开发者可以轻松实现JavaScript常…

Unity 资源管理之StreamingAssets

StreamingAssets也是Unity中特殊的文件夹&#xff0c;用于存放运行时可以直接访问的资源。StreamingAssets一般存放数据或配置文件、图片、视频资源等。 StreamingAssets的文件路径可以通过Application.streamingAssetsPath来获取。 加载或访问使用WWW类或UnityWebRequest类。…