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领域的前沿思考和实践,现场座无…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

