当前位置: 首页 > news >正文

多进程间通信学习之无名管道

  • 无名管道:
  • 首先它是内核空间的实现机制;
  • 然后只能用于亲缘进程间通信
  • 它在内核所占的大小是64KB
  • 它采用半双工的通信方式;
  • 请勿使用lseek函数
  • 读写特点:
  • 若读端存在写管道,那么有多少数据,就写多少数据,直到无名管道写满为止,此时会出现写阻塞,当无名管道出现新的4KB空间,写操作就会解除阻塞;
  • 若读端不存在写管道,会出现管道破裂的情况;
  • 若写端存在读管道,那么有多少数据,就读多少数据,没有数据的时候,会出现阻塞等待
  • 若写端不存在读管道,有多少数据,就读多少,没有数据的时候,就会立即返回,即非阻塞的状态;
  • 创建无名管道(pipe函数):
	#include <unistd.h>int pipe(int pipefd[2]);/*功能:创建一个管道,是一个单向的数据通道,可用于进程间通信数组pipefd返回两个指向管道的文件描述符:pipefd[0]指向管道的读端 pipefd[1]指向管道的写端写入管道的数据被内核缓冲(64KB),直到从管道中读走参数:操作管道的文件描述符数组 pipefd[0]指向读端 pipefd[1] 指向管道的写端返回值:成功 0失败 -1 重置错误码*/ 
  • 实例要求:
  • 创建一个进程,要求使用无名管道,实现父进程写子进程读的操作;
  • 示例代码:
	#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <stdbool.h>int main(int argc, char const *argv[]){   int pipe_fd[2] = {0};if(-1 == pipe(pipe_fd)){perror("pipe error");exit(-1);}pid_t pid = 0;if(-1 == (pid = fork())){perror("fork error");exit(-1);}else if(0 < pid) //父进程写{close(pipe_fd[0]);char buf[128] = {0};while(true){fgets(buf,sizeof(buf),stdin);buf[strlen(buf) - 1] = '\0';write(pipe_fd[1],buf,sizeof(buf));if(!strncmp(buf,"quit",4)){exit(-1);}}sleep(2);wait(NULL);   //回收子进程的资源}else if(0 == pid) //子进程读{close(pipe_fd[1]);char buf[128] = {0};while(true){memset(buf,0,sizeof(buf));read(pipe_fd[0],buf,sizeof(buf));if(!strncmp(buf,"quit",4)){close(pipe_fd[0]);exit(-1);}printf("父进程发来的消息[%s]\n",buf);}}return 0;}
  • 运行结果:
	linux@ubuntu:~$ gcc pipe.c linux@ubuntu:~$ ./a.out hello beijing父进程发来的消息[hello beijing]i love china父进程发来的消息[i love china]quitlinux@ubuntu:~$ 
  • 总结:
  • 为了防止误操作,在父进程和子进程里,分别关闭读端和写端;

相关文章:

多进程间通信学习之无名管道

无名管道&#xff1a;首先它是内核空间的实现机制&#xff1b;然后只能用于亲缘进程间通信&#xff1b;它在内核所占的大小是64KB&#xff1b;它采用半双工的通信方式&#xff1b;请勿使用lseek函数&#xff1b;读写特点&#xff1a;若读端存在写管道&#xff0c;那么有多少数据…...

flink常用的几种调优手段的优缺点

背景: 不管是基于减少反压还是基于减少端到端的延迟的目的&#xff0c;我们有时候都需要对flink进行调优&#xff0c;本文就整理下几种常见的调优手段以及他们的优缺点 flink调优手段 1.使用事件时间EventTime模式时&#xff0c;可以设置水位线发送的时间间隔&#xff0c;比…...

如何选择安全又可靠的文件数据同步软件?

数据实时同步价值体现在它能够确保数据在多个设备或系统之间实时更新和保持一致。这种技术可以应用于许多领域&#xff0c;如电子商务、社交媒体、金融服务等。在这些领域中&#xff0c;数据实时同步可以带来很多好处&#xff0c;如提高工作效率、减少数据不一致、提高用户体验…...

使用反射调用类的私有内部类的私有方法

文章目录 使用反射调用类的私有方法类实现方法实现代码 使用反射调用类的私有内部类的私有方法类实现方法实现代码 在进行单元测试时&#xff0c;我们往往需要直接访问某个类的内部类或者某个类的私有方法&#xff0c;此时正常的调用就无能为力了&#xff0c;因此我们可以使用反…...

记一次 AWD 比赛中曲折的 Linux 提权

前提背景&#xff1a; 今天一场 AWD 比赛中&#xff0c;遇到一个场景&#xff1a;PHP网站存在SQL注入和文件上传漏洞, MYSQL当前用户为ROOT&#xff0c;文件上传蚁剑连接SHELL是权限很低的用户。我需要想办法进行提权&#xff0c;才能读取到 /root 目录下的 flag。 一、sqlmap …...

[SpringCloud] Feign 与 Gateway 简介

目录 一、Feign 简介 1、RestTemplate 远程调用中存在的问题 2、定义和使用 Feign 客户端 3、Feign 自定义配置 4、Feign 性能优化 5、Feign 最佳实践 6、Feign 使用问题汇总 二、Gateway 网关简介 1、搭建网关服务 2、路由断言工厂 3、路由的过滤器配置 4、全局过…...

[Unity] 个人编码规范与命名准则参考

Unity C# 在写的过程中, 和纯 C# 是有很大出入的. 甚至说, Unity C# 就是邪教. 例如它的命名规范与 C# 是不一致的, 而且由于游戏引擎的介入, 编写时的习惯相较于 C# 来讲, 也需要有所改变. 通用编码规范 常见的一些编码规范就不需要过多提及了, 这里只做简单列举. 添加合适…...

堆栈与队列算法-以链表来实现队列

目录 堆栈与队列算法-以链表来实现队列 C代码 堆栈与队列算法-以链表来实现队列 队列除了能以数组的方式来实现外&#xff0c;也可以用链表来实现。在声明队列的类中&#xff0c;除了和队列相关的方法外&#xff0c;还必须有指向队列前端和队列末尾的指针&#xff0c;即fron…...

快速入门:使用 Spring Boot 构建 Web 应用程序

前言 本文将讨论以下主题&#xff1a; 安装 Java JDK、Gradle 或 Maven 和 Eclipse 或 IntelliJ IDEA创建一个新的 Spring Boot 项目运行 Spring Boot 应用程序编写一个简单的 Web 应用程序打包应用程序以用于生产环境 通过这些主题&#xff0c;您将能够开始使用 Spring Boo…...

01.CentOS7静默安装oracle11g

CentOS7静默安装oracle11g 一、下载Oracle11g安装包二、开始安装oracle11g三、配置Oracle监听程序四、添加数据库实例五、设置开机启动六、登录后解除锁定 一、下载Oracle11g安装包 下载链接&#xff1a;https://pan.baidu.com/s/1gcLMFGX7-8ju7OoFOFLzQA 提取码&#xff1a;6…...

SASE安全访问服务边缘

自存用&#xff1a; 参考文档&#xff1a; 什么是安全访问服务边缘 (SASE)&#xff1f; | Microsoft 安全 网安人必读 &#xff5c;一文读懂SASE - 知乎...

k8s集群升级

目录 1. 部署cri-docker &#xff08;所有集群节点&#xff09; 2. 升级master节点 3. 升级worker节点 4. 部署containerd 1. 部署cri-docker &#xff08;所有集群节点&#xff09; k8s从1.24版本开始移除了dockershim&#xff0c;所以需要安装cri-docker插件才能使用docker …...

redis原理 主从同步和哨兵集群

主从库如何实现数据一致 我们总说的 Redis 具有高可靠性&#xff0c;又是什么意思呢&#xff1f;其实&#xff0c;这里有两层含义&#xff1a;一是数据尽量少丢失&#xff0c;二是服务尽量少中断。AOF 和 RDB 保证了前者&#xff0c;而对于后者&#xff0c;Redis 的做法就是增…...

四季古诗赏析

春晓 春眠不觉晓&#xff0c;处处闻啼鸟。夜来风雨声&#xff0c;花落知多少。 夏意 别院深深夏簟清&#xff0c;石榴开遍透帘明。树阴满地日当午&#xff0c;梦觉流莺时一声。 秋词 自古逢秋悲寂寥&#xff0c;我言秋日胜春朝。晴空一鹤排云上&#xff0c;便引诗情到碧霄。 …...

【网络协议】聊聊套接字socket

网络编程我们知道是通过socket进行编程的&#xff0c;其实socket也是基于TCP和UDP协议进行编程的。但是在socket层面是感知不到下层的&#xff0c;所以在设置参数的时候&#xff0c;其实是端到端协议智商的网络层和传输层。TCP是数据流所以设置为SOCK_STREAM&#xff0c;而UDP是…...

GEO生信数据挖掘(十一)STRING数据库PPI蛋白互作网络 Cytoscape个性化绘图【SCI 指日可待】

GEO生信数据挖掘&#xff08;十&#xff09;肺结核数据-差异分析-WGCNA分析&#xff08;900行代码整理注释更新版本&#xff09; 通过 前面十篇文章的学习&#xff0c;我们应该已经可以获取到一个”心仪的基因列表“了&#xff0c;相较于原始基因数量&#xff0c;这个列表的数…...

api接口更新钉钉文档

class OperateKnowledgeBaseExcel():robot_code # agent_id #app_key #群机器人app_secret #群机器人def __init__(self,union_id, workbook_id, worksheet_id):self.union_id union_idself.workbook_id workbook_id # 获取方式&#xff1a;... &g…...

Android---如何同view进行渲染

ViewRootImpl 在 Activity、window 和 View 三者关系之间起着承上启下的作用。一方面&#xff0c;ViewRootImpl 中通过 Binder 通信机制&#xff0c;远程调用 WindowSession 将 View 添加到 Window 中&#xff1b;另一方面&#xff0c;ViewRootImpl 在添加 View 之前&#xff0…...

【LeetCode:26. 删除有序数组中的重复项 | 双指针】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

如何判断一个对象是不是一个空对象?

在JavaScript中&#xff0c;可以使用以下方法来判断一个对象是否为空对象&#xff1a; 1&#xff1a;使用Object.keys()方法&#xff1a;Object.keys()方法返回一个包含对象自身可枚举属性的数组。通过判断该数组的长度&#xff0c;可以确定对象是否为空对象。 function isEm…...

VMware 17 开机自启实战:从配置到故障排查的完整指南

1. VMware 17开机自启基础配置 很多运维工程师在生产环境中都会遇到这样的需求&#xff1a;让VMware虚拟机像系统服务一样随宿主机自动启动。这个功能对于无人值守的服务器、工控机等场景特别重要。下面我就以VMware Workstation 17为例&#xff0c;手把手教你配置全过程。 首…...

TI WEBENCH滤波器设计工具:从理论到实战的电路设计加速器

1. WEBENCH滤波器设计工具&#xff1a;从概念到成品的“加速器”在模拟电路设计&#xff0c;尤其是信号调理领域&#xff0c;滤波器设计一直是个既基础又颇具挑战性的环节。无论是为了滤除电源噪声&#xff0c;还是从复杂的传感器信号中提取有效成分&#xff0c;一个性能优良的…...

Perplexity提示工程精要(2024权威认证版):覆盖92%高频场景的12类黄金模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity提示工程的核心原理与认知框架 Perplexity&#xff08;困惑度&#xff09;作为衡量语言模型预测能力的关键指标&#xff0c;其本质是模型对真实文本序列分布的负对数似然指数化表达。在提示工…...

Go语言事件驱动:CloudEvents

Go语言事件驱动&#xff1a;CloudEvents 1. CloudEvents实现 type Event struct {SpecVersion stringType stringSource stringID stringData []byte }2. 总结 CloudEvents是云原生事件的标准格式&#xff0c;促进跨服务的事件交互。...

内存计算芯片技术:相变存储器与混合信号架构解析

1. 内存计算芯片技术概述内存计算&#xff08;In-Memory Computing&#xff09;技术正在重塑现代计算架构的格局。传统冯诺依曼架构中&#xff0c;数据需要在处理器和存储器之间频繁搬运&#xff0c;这种"存储墙"问题已成为制约计算效率的主要瓶颈。根据IEEE的实测数…...

为什么你的HIS系统总接不住Perplexity查询请求?5类认证鉴权错配场景,运维团队今夜必须修复

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity医院查询功能的架构本质与通信契约 Perplexity医院查询功能并非传统单体服务的简单封装&#xff0c;而是一个面向语义理解与多源异构数据协同的轻量级服务网关。其核心架构采用“查询意图解析—上下…...

TypeScript-------------类型收窄

//类型收窄 //typeof 类型收窄 function uppercase(content:string|number) {if(typeof content string)//收窄的类型有限{return content.toUpperCase();}return content; }//真值收窄 function getString(content?:string)//加&#xff1f;表示参数可传可不传 {if(typeof …...

别再只盯着原理图了!FPGA/SoC硬件工程师必看的RGMII接口PCB布线实战指南(含时序约束与等长规则)

RGMII接口PCB设计实战&#xff1a;从时序规范到千兆以太网稳定通信 在FPGA和SoC硬件开发中&#xff0c;RGMII接口设计一直是工程师们又爱又恨的挑战。爱它的简洁高效——相比GMII接口减少了近一半的引脚数量&#xff1b;恨它的时序敏感——一个看似微小的PCB布线失误就可能导致…...

ArcGIS 10.2也能用天地图!手把手教你用WMTS服务和lyr文件搞定低版本兼容

ArcGIS 10.2兼容天地图WMTS服务的工程级解决方案 在GIS项目实施过程中&#xff0c;我们常常会遇到软件版本滞后于服务更新的尴尬局面。天地图作为国内权威的地理信息服务&#xff0c;自2019年起仅支持ArcGIS 10.6及以上版本直接加载&#xff0c;这对仍在使用ArcGIS 10.2/10.3等…...

ArcGIS Pro脚本工具实战:5分钟用arcpy给要素批量‘改名’(保姆级参数配置指南)

ArcGIS Pro脚本工具实战&#xff1a;5分钟用arcpy给要素批量‘改名’&#xff08;保姆级参数配置指南&#xff09; 当你在处理上百个GIS图层时&#xff0c;是否曾被重复的"右键-属性-修改别名"操作折磨到崩溃&#xff1f;上周我接手一个城市管网项目&#xff0c;需要…...