0805作业+梳理
一、作业:
代码:
create.c
#include<myhead.h>
int main(int argc, const char *argv[])
{//创建一个有名管道文件if(mkfifo("./linux",0664)==-1){perror("mkfifo linux error");return -1;}getchar();system("rm linux");return 0;
}
write.c
#include<myhead.h>
int main(int argc, const char *argv[])
{//以写的形式打开linux文件int wfd = open("./linux",O_WRONLY);if(wfd==-1){perror("open error");return -1;}//准备一个字符串用于写入数据char sbuf[128] = "";while(1){printf("请输入>>>");fgets(sbuf,sizeof(sbuf),stdin);//从终端获取字符串sbuf[strlen(sbuf)-1] = 0;//将数据通过写端写入管道write(wfd,sbuf,strlen(sbuf));//判读终端获取的数据 if(strcmp(sbuf,"quit")==0){break;}}//关闭文件close(wfd);return 0;
}
reciv.c
#include<myhead.h>
int main(int argc, const char *argv[])
{//以只读的形式打开linux文件int rfd = open("./linux",O_RDONLY);if(rfd==-1){perror("open error");return -1;}//打开存储文件int fd = -1;if(fd =open("./cunchu.txt",O_WRONLY|O_CREAT|O_TRUNC,-664)==-1){perror("open cunchu error");return -1;}//定义一个字符串准备接受消息char rbuf[128] = "";while(1){bzero(rbuf,sizeof(rbuf));//从管道读取数据read(rfd,rbuf,sizeof(rbuf));if(strcmp(rbuf,"quit")==0){break;}//输出数据int src = sizeof(rbuf);if(src != 0){int a = write(fd,rbuf,sizeof(rbuf));printf("%d\n",a);}printf("存储完成\n");printf("收到来信:%s\n",rbuf);}//关闭文件close(rfd);close(fd);
}
运行结果:

代码:
create.c
#include<myhead.h>
int main(int argc, const char *argv[])
{//创建一个有名管道文件if(mkfifo("./linux2",0664)==-1){perror("mkfifo linux2 error");return -1;}getchar();system("rm linux2");return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{//创建一个有名管道文件if(mkfifo("./linux1",0664)==-1){perror("mkfifo linux1 error");return -1;}getchar();system("rm linux1");return 0;
}
recv.c
#include<myhead.h>
void *task1(void *arg)
{//以读的形式打开管道文件int rfd = open("./linux1",O_RDONLY);if(rfd == -1){perror("open error");}printf("管道文件已打开");char rbuf[128] = "";while(1){bzero(rbuf,sizeof(rbuf));read(rfd,rbuf,sizeof(rbuf));if(strcmp(rbuf,"quit")==0){break;}printf("接收端收到的消息为:%s\n",rbuf);}close(rfd);
}
void *task2(void *arg)
{//以写的形式打开管道文件int wfd = open("./linux2",O_WRONLY);if(wfd == -1){perror("open error");}printf("管道文件已打开");//发送数据char wbuf[128] = "";while(1){printf("请输入>>>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1] = 0;//将数据发送到管道文件write(wfd,wbuf,strlen(wbuf));//判断数据if(strcmp(wbuf,"quit")==0){break;}}close(wfd);
}int main(int argc, const char *argv[])
{//定义两个存储线程号pthread_t tid1=-1;pthread_t tid2=-1;//创建两个分支线程if(pthread_create(&tid1,NULL,task1,NULL)!=0){printf("pthread_create error\n");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("pthread_create task2 error\n");return -1;}//回收线程资源pthread_join(tid1,NULL);pthread_join(tid2,NULL);return 0;
}
send.c
#include<myhead.h>
void *task1(void *arg)
{//以读的形式打开管道文件int rfd = open("./linux2",O_RDONLY);if(rfd == -1){perror("open error");}printf("管道文件已打开");char rbuf[128] = "";while(1){bzero(rbuf,sizeof(rbuf));read(rfd,rbuf,sizeof(rbuf));if(strcmp(rbuf,"quit")==0){break;}printf("接收端收到的消息为:%s\n",rbuf);}close(rfd);
}
void *task2(void *arg)
{//以写的形式打开管道文件int wfd = open("./linux1",O_WRONLY);if(wfd == -1){perror("open error");}printf("管道文件已打开");//发送数据char wbuf[128] = "";while(1){printf("请输入>>>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1] = 0;//将数据发送到管道文件write(wfd,wbuf,strlen(wbuf));//判断数据if(strcmp(wbuf,"quit")==0){break;}}close(wfd);
}int main(int argc, const char *argv[])
{//定义两个存储线程号pthread_t tid1=-1;pthread_t tid2=-1;//创建两个分支线程if(pthread_create(&tid1,NULL,task1,NULL)!=0){printf("pthread_create error\n");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("pthread_create task2 error\n");return -1;}//回收线程资源pthread_join(tid1,NULL);pthread_join(tid2,NULL);return 0;
}
运行结果:


二、思维导图


相关文章:
0805作业+梳理
一、作业: 代码: create.c #include<myhead.h> int main(int argc, const char *argv[]) {//创建一个有名管道文件if(mkfifo("./linux",0664)-1){perror("mkfifo linux error");return -1;}getchar();system("rm linux…...
Java高并发编程详解教程(对高并发更深一层的领悟和体会 电子版)
前言 第一部分主要阐述Thread的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信以及如何保护共享资源等内容,它是深入学习多线程内容的基础。 在第二部分中之所以引人 ClassLoader,是因为 ClassLoader 与线程不无关系࿰…...
字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 s 只包含小写字母 示例 1: 输入: s "leetcode" 输出: 0示例 2: 输入: s "loveleetcode" 输出: 2示例 3: 输…...
leetcode数论(3044. 出现频率最高的质数)
前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字: 最多有 8 条路径可以选择࿱…...
70.加载功能菜单功能设计
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:69.搭建分析工具界面 以 69.搭建分析工具界面 它的代码为基础进行修改 效果图…...
在线Banner设计工具大比拼:谁更胜一筹
在数字营销的时代,一个吸引眼球的 Banner 广告是吸引潜在客户、提高品牌知名度的关键。为了帮助营销人员和设计师快速创建专业的 Banner 广告,市面上出现了多种易于使用的 Banner 设计工具。本文将介绍几个受欢迎的 Banner 设计工具,包括即时…...
C++ STL copy, move 用法
一:功能 正向(从前向后的顺序)拷贝/移动操作,将一个容器元素拷贝/移动到另一容器中。 二:用法 #include <iostream> #include <vector> #include <algorithm>int main() {std::vector<std::str…...
MoonBit 周报 Vol.52:增加类型别名的支持、错误类型声明方式说明、MoonBit AI 支持生成文档等!
weekly 2024-08-05 MoonBit更新 JSON字面量支持array spread。 let xs: Array[json.JsonValue] [1, 2, 3, 4] let _: json.JsonValue [1, ..xs]增加了类型别名的支持,主要是为了渐进式代码重构和迁移,而不是某种给类型简短名字的机制。例如…...
Android开发之事件分发
#来自ウルトラマンゼロ(哉阿斯) 1 Activity 构成 平常布局展示在ContentView中。 2 事件分发 事件分发的本质其实就是把事件(Touch)封装成 MotionEvent 类,然后传递给 View 的层级处理。 MotionEvent 事件类型主要有…...
PyTorch深度学习实战(2)——PyTorch快速入门
PyTorch的简洁设计使得它易于入门,在深入介绍PyTorch之前,本文先介绍一些PyTorch的基础知识,以便读者能够对PyTorch有一个大致的了解,并能够用PyTorch搭建一个简单的神经网络。 1 Tensor Tensor是PyTorch中最重要的数据结构&#…...
ServletConfig、ServletContext超详细讲解
文章目录 前言一、ServletConfig的使用1.ServletConfig定义2.ServletConfig的API3.ServletConfig的测试代码: 二、 ServletContext的使用1.ServletContext定义2.ServletContext如何用3. ServletContext其他重要API 总结 前言 ServletConfig接口代表了Servlet的配置信…...
【文献阅读】GraphAny: A Foundation Model for Node Classification on Any Graph
Abstract 可以执行任何新任务而无需特定训练的基础模型已经在视觉和语言应用中引发了机器学习的革命。然而,涉及图结构数据的应用仍然是基础模型面临的一个难题,因为每个图都有独特的特征和标签空间。传统的图机器学习模型,如图神经网络&…...
动态规划.
目录 (一)递归到动规的一般转化方法 (二)动规解题的一般思路 1. 将原问题分解为子问题 2. 确定状态 3. 确定一些初始状态(边界状态)的值 4. 确定状态转移方程 (三)能用动规解…...
PHP常用函数
字符串 strlen()获取字符串长度strpos()在字符串内查找一个字符或一段指定的文本,返回第一次出现的位置或falsestripos()同上,但不区分大小写strrpos()同上上,返回最后一…...
完全用python 实现消息中间件4
为了进一步完善这个消息中间件,我们可以添加以下功能: 消息确认:客户端可以发送一个确认消息,表明消息已经被正确接收。消息队列:使用一个队列来存储消息,而不是直接存储在字典中。多消费者支持࿱…...
公司新来的两个Java后端,因题背太熟轻松过面试?
以前面试是背八股文,而2024年的后端面试都是流行问场景题!建议大家把面试想简单一点,顺的场景题直接给有需要的人,希望能对大家有所帮助! 由于平台篇幅原因,很多java面试资料内容展示不了,需要…...
Pinia状态管理库
为了跨组件传递JWT令牌,我们就会利用Pinia状态管理库,它允许跨组件或页面共享状态。 使用Pinia步骤: 安装pinia:cnpm install pinia 在vue应用实例中使用pinia 在src/stores/token.js中定义store 在组件中使用store 1.在main.js文…...
利用ffmpeg转码视频为gif图片,调整gif图片的大小
【1】压缩gif图片大小 一般发布技术文章的时候经常要插入GIF图演示软件效果,但是一些编辑器总是限制大小,但是录制的时候可能一不小心就搞大了。 要将 GIF 图片大小限制在 10MB 内,可以使用 FFmpeg 进行压缩。 以下是一个ffmpeg的命令&…...
【Java 第四篇章】流程控制、容器
一、流程控制 1、概念 //1.if//2.if...else//3.if...else if...else...//4.switch//5.跳出循环体:break和continue2、语法 //1. ifif(条件表达式){//执行代码块}//2.if...elseif(条件表达式){//条件表达式为真执行的代码块} else {//条件表达式为假执行的代码块}//…...
华为云全域Serverless技术创新:全球首创通用Serverless平台被ACM SIGCOMM录用
华为开发者大会2024(HDC 2024)在东莞松山湖圆满结束,期间华为云主办的“全域Serverless时代:技术创新引领,赋能行业实践”专题论坛,向广大开发者传递了Serverless领域的前沿思考和实践,现场座无…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

