linux 进程间通信:匿名管道pipe()

进程间内存独立且相互不可见,进程间通信需要特殊方法

匿名管道pipe()

/* Create a one-way communication channel (pipe).
   If successful, two file descriptors are stored in PIPEDES;
   bytes written on PIPEDES[1] can be read from PIPEDES[0].
   Returns 0 if successful, -1 if not.  */
extern int pipe (int __pipedes[2]) __THROW __wur;
输入一个2个元素的int数组地址,生成单向匿名管道,调用后该数组[0]为读取描述符,[1]为写入描述符,默认打开,使用前需要关闭另一通道,然后直接调用系统调用函数write open来进行读写

 

一个实例

#include "sys/wait.h"//waitpid声明处
#include "sys/types.h"//pid_t声明处,实质是int
#include "stdio.h"
#include "unistd.h"//系统调用函数声明 fork,close,write read pipe等
#include "stdlib.h"
#include "string.h"


int main(int argc, char const *argv[])
{
    int p[2];
    pipe(p);//两个文件描述符已经打开
    pid_t cpid = fork();

    if(cpid == 0)
    {
        char buf[11] = {0};
        close(p[1]);//关闭写管道

        read(p[0], buf, 10); //从读管道中读取一次,最多读取10字节
        printf("child process read: %s\n",buf);
        printf("child process end\n");
        exit(0);//打印出来,退出

    }
    else if(cpid > 0)
    {
        close(p[0]);//关闭读管道
        char buf2[100] = {0};
        scanf("%s", buf2);//从标准输入读取一段数据
        write(p[1], buf2, strlen(buf2));//通过管道发送到子进程
        waitpid(cpid, NULL, 0);//等待子进程结束
        printf("parent process end\n");
    }
    

    /* code */
    return 0;
}

 运行,分别输入10字节以上和10字节以下的数据看看

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

哈默纳科Harmonic谐波减速机机器人精准高效动力传递的核心力量

在当今科技飞速发展的时代,机器人技术正以惊人的速度改变着我们的生产与生活方式。而在机器人的精密机械结构中,哈默纳科 Harmonic 谐波减速机扮演着不可或缺的角色,成为机器人精准高效动力传递的关键所在。 1.高精度与灵活性:哈默…

Codigger SIDE之Helix编辑器

在Codigger的多维世界中,Helix编辑器以其卓越的性能和灵活性,成为开发者手中的利剑。基于Rust构建,Helix不仅继承了Vim编辑器的经典特性,更以其现代化的功能,重新定义了代码编辑的边界。 模式切换的艺术 Helix的模式切…

Scala的正则表达式二

验证用户名是否合法 规则 1.长度在6-12之间 2.不能数字开头 3.只能包含数字,大小写字母,下划线def main(args: Array[String]): Unit {val name1 "1admin"//不合法,是数字开头val name2 "admin123"//合法val name3 &quo…

C++ 运算符重载 (备查)

基础 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。 运算符重载也可以发生函数重载。 语法: void operator(); //代表了被重载的运算符。函数的参数个数取决于两个因素。1)运算符是一元(一…

zerotier实现内网穿透(访问内网服务器)

moo 内网穿透工具 实用工具:zerotier 目录 内网穿透工具 Windows下zerotier安装 ubuntu系统下的zerotier安装 使用moon加速 Windows下zerotier安装 有了网络之后,会给你一个网络id,这个网络id是非常重要的,其它设备要加入…

【C++】刷题强训(day14)--乒乓球匡、组队竞赛、删除相邻数字的最大分数

目录 1、乒乓球匡 1.1题目 1.2 思路 1.3 代码实现 2、组队竞赛 2.1 题目 2.2 思路 2.3 代码实现 3、删除相邻数字的最大分数 3.2 思路 3.3 代码实现 刷题汇总&#xff1a;传送门&#xff01; 1、乒乓球匡 1.1题目 1.2 思路 这道题注意一下示例&#xff0c;<br…

Windows安装elasticsearch、Kibana以及IK分词器

一、下载 1.下载elasticsearch 访问官网Download Elasticsearch | Elastic&#xff0c;下载elasticsearch 2.下载 Kibana 访问Download Kibana Free | Get Started Now | Elastic &#xff0c;下载 Kibana 3. IK分词器下载 访问Gitee 极速下载/elasticsearch-analysis-ik选…

STM32输入捕获详解

目录 一、引言 二、输入捕获原理 三、寄存器介绍 四、配置步骤 1.开启时钟 2.GPIO 初始化 3.初始化定时器 4.配置输入捕获模式 5.使能捕获和更新中断 6.设置中断分组并编写中断服务函数 7.使能定时器 五、程序示例 六、总结 一、引言 在嵌入式系统开发中&#xff0…

聚类及Python下实现 K-means 算法

聚类 聚类是无监督学习中的一种重要方法&#xff0c;旨在将数据集中相似的数据对象划分到同一个簇中&#xff0c;使得不同簇之间的数据对象差异尽可能大。在大数据环境下&#xff0c;聚类可以帮助挖掘数据中的隐藏结构和模式&#xff0c;应用场景十分广泛&#xff0c;比如在客…

开源分布式系统追踪-01-Zipkin-01-入门介绍

分布式跟踪系列 CAT cat monitor 分布式监控 CAT-是什么&#xff1f; cat monitor-02-分布式监控 CAT埋点 cat monitor-03-深度剖析开源分布式监控CAT cat monitor-04-cat 服务端部署实战 cat monitor-05-cat 客户端集成实战 cat monitor-06-cat 消息存储 skywalking …

解决Jmeter HTTP Cookie管理器cookie不生效

解决Jmeter HTTP Cookie管理器cookie不生效问题 解决Jmeter HTTP Cookie管理器cookie不生效问题1、设置Jmeter HTTP Cookie管理器cookie后&#xff0c;发起的请求显示[no cookies]jmeter问题复现&#xff1a;这里同样使用postman进行重试&#xff0c;发现是可以正常获取数据的&…

【6】数据分析检测(DataFrame 1)

学习目标3 昨天&#xff0c;我们学习了Series。 而Pandas的另一种数据类型&#xff1a;DataFrame&#xff0c;在许多特性上和Series有相似之处。 今天&#xff0c;我们将学习DataFrame的相关知识&#xff1a; 1. DataFrame的概念 2. 构造一个DataFrame 3. DataFrame的常用…

LeetCode 热题 100_环形链表 II(26_142_中等_C++)(单链表;哈希表;快慢指针)

LeetCode 热题 100_环形链表 II&#xff08;26_142&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;代码实现&#xff08;思路一&#xff08;哈希表&#xff09;&#xff09;&#xff1a;代码实现&#xff08;思路二&#xff0…

如何通过看板进行跨境电商的圣诞商品数据分析与优化选品流程?

引言 随着圣诞季的临近&#xff0c;跨境电商迎来了重要的销售时机。选品工作对于跨境电商的成功至关重要&#xff0c;直接关系到销售业绩和利润。本文结合相关网页信息&#xff0c;深入探讨跨境电商在圣诞期间如何利用信息整合工具展开选品工作&#xff0c;并优化选品流程。同…

PHP开发设计模式:单例模式

PHP开发设计模式&#xff1a;单例模式 特点&#xff1a; 三私一公&#xff1a;私有的静态变量&#xff08;存放实例&#xff09;&#xff0c;私有的构造方法&#xff08;防止创建实例&#xff09;&#xff0c;私有的克隆方法 (防止克隆对象)&#xff0c;公有的静态方法&#…

使用HTML获取商品详情:技术实现与最佳实践

1. 引言 在电子商务领域&#xff0c;获取商品详情是提升用户体验和增强网站功能性的关键。本文将探讨如何使用HTML结合其他技术手段获取商品详情&#xff0c;并展示如何将这些信息有效地呈现给用户。 2. 理解商品详情页面的结构 在开始编码之前&#xff0c;我们需要了解商品…

MR30分布式IO在新能源领域加氢站的应用

导读 氢能被誉为21世纪最具发展潜力的清洁能源&#xff0c;氢能科技创新和产业发展持续得到各国青睐。氢能低碳环保&#xff0c;燃烧的产物只有水&#xff0c;是用能终端实现绿色低碳转型的重要载体。氢能产业链分别为上游制氢、中游储运以及下游用氢。上游制氢工艺目前大部分…

WEB安全基础知识

WAF全称为Web Application Firewall&#xff08;网页应用防火墙&#xff09;是一种专门设计用来保护web应用免受各种网络攻击的安全防护措施。它位于客户端与服务器之间&#xff0c;监控和过滤HTTP流量&#xff0c;从而拦截恶意请求、识别并防御常见的web攻击。 WAF的主要功能…

【数据结构】B树家族解析:B树、B+树与B*树的理论与B树插入实现(C++)

文章目录 一、常见的搜索结构二、B树2.1 B树概念2.2 开销 三、代码实现3.1 B树节点的设计3.2 B树设计3.3 插入操作实现1. 查找插入位置&#xff08;Find 函数&#xff09;2. 插入关键字到节点&#xff08;InsertKey 函数&#xff09;3. 处理节点分裂&#xff08;Insert 函数&am…

protobuf c++开发快速上手指南

1、环境准备 在c环境使用 protobuf&#xff0c;需要安装protobuf runtime以及protobuf的编译器&#xff1a;protoc&#xff0c;其作用如下表格&#xff1a; 需要安装的环境作用protoc将proto文件编译成c源码protobuf runtime编译c源码需要链接到protobuf库 注意&#xff1a;…