无名(匿名)管道实现

匿名管道(Pipe)和命名管道(FIFO) catalogue 1. pipe匿名管道 2. named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。管道是Linux支持的最初Unix IPC形式之一,具有以下特点 1. 管道是半双工的,数据只能向一个方向流动; 需要双方通信时,需要建立起两个管道 2. 只能用于父子进程或者兄弟进程之间(具有. 阅读详情

无名管道没有文件名,存在于内存中。当进程结束后,管道也随之结束。

管道的读端是有阻塞的,会等到有数据写入才返回。如果写段关闭,读端会马上返回。

它无法保证数据的原子性。一般用于无名管道一般用于两个进程之间通信。

 

以下是无名管道代码的基本实现。主要是运用fork()函数诞生子进程,并注意数组元素pipefd[1]写段,pipefd[0]是读端。

pipe必须在fork()之前创建,才能保证亲缘进程使用同一个管道

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
 
int main()
{
 
    pid_t pid;
    int pipefd[2]; //pipe[1]是写入端。pipe[0]是读端
    
    int ret=pipe(pipefd); 
    if(ret!=0)
    {
        printf("Create pipe falied!\n");
        return -1;
    }
 
    pid=fork();
    if(pid==0)    //子进程
    {
        write(pipefd[1],"hello world",12);
        exit(0);
    }
    else if(pid>0)    //父进程
    {
        char buffer[12]={0};
        read(pipefd[0],buffer,12);
        printf("Read data:%s\n",buffer);
 
        wait(NULL); //等待子进程结束
        
        close(pipefd[0]);
        close(pipefd[1]);
    }
 
    return 0;
}

输出:

Linux系统编程6(进程通讯之无名管道、有名管道和共享存储映射) 本文主要介绍进程通信中的无名管道、有名管道和共享存储映射。 阅读详情

相关推荐

对OS实验中的“管道”的一点儿理解

管道通信机制 管道 pipe 是进程间通信最基本的一种机制。在内存中建立的管道称为无名管道, 在磁盘上建立的管道称为有名管道。无名管道随着进程的撤消而消失,有名管道则可 以长久保存,shell 命令符| 建立的就是无名管道,而 shell 命令 mkfifo 建立的是有名 管道。两个进程可以通过管道一个在管道一端向管道发送其输出,给另一进程可以在 管道的另一端从管道得到其输入.管道以半双工方式工作...

deniece1的博客 1074

进程间通信——管道代码实现

服务端 ·                           创建管道CreateNamedPipe ·                           等待客户端连接ConnectNamedPipe ·                           Read 或 Write操作 ·                           断开连接DisconnectName

ao929929fei的专栏 855

进程之间的通信(管道详解)

每个进程的空间地址是独立的,因此进程与进程之间是不能相互访问的,要进行进程间通讯,必须通过内核,内核会开辟一段特殊的内存空间,进程可以在这块内存空间进行数据的交换。管道是一个重要的通信机制,思想是在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息,由于这种方式具有单向传递数据的特点(),所以称为管道,即在某一时刻只能一端读数据一端写数据。根据使用方式和通信对象将它分为无名管道,有名管道(命名管道)两类无论有名还是无名,写入管道的数据都在内存中主要用于不相关的进程间通信。.........

oorik的博客 2757

7分钟学会匿名管道pipe()的使用(内附完整代码测试)

7分钟学会匿名管道pipe()的使用(内附完整代码测试)

小石_coding 1395

linux 无名管道使用示例

linux 父子进程间 使用无名管道通信

Hive数据仓库分层架构实战:4层黄金模型×6大业务场景×万亿级数据优化方案

根据《2023数据中台成熟度报告》,‌78%的ETL任务性能瓶颈‌源于分层设计不合理。本文基于某头部电商平台PB级数据仓库建设经验,结合金融风控、用户画像、实时大屏等核心场景,深度解析‌ODS→DWD→DWS→ADS‌四层架构设计原则,揭秘‌万亿级数据治理方案‌与‌维度建模20大避坑策略‌。

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 1481

进程间通信:管道及命名管道(代码实现)

管道:1.管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;             2.只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);             3.单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,                  并且只存在

wangiijing的博客 7062

自动驾驶仿真基础:使用Veristand自定义CAN报文的Checksum和Counter

文章目录前言一、关于Checksum的组成形式二、自定义的Checksum方法一1、实现的主要流程图如下:2、方法一的主要算法参考三、自定义的Checksum方法二1、软件及插件下载;2、Custom device的使用;4、Veristand调用Custom Device;5、Veristand发送信号值;6、部署到实时机; 前言 1、现在很多的车厂对于车辆的安全机制非常重视,车厂通过对发送的CAN数据进行加密而形成一种保护机制,而Checksum和Counter是其中的一种保护介质,当CAN报文数据的

zataji的博客 1万+

【进程间通信1】使用管道实现进程间的通信(附C++实现代码)

本文主要讲解怎样进行进程间的通信,主要用到的工具是管道,涉及单工和半双工通信,并讲解了文件描述符等相关信息,同时给出了C++的实现代码。

weixin_50941083的博客 6136

利用dddd_trainer训练通用验证码识别模型

博文介绍了使用dddd_trainer工具训练自定义验证码识别模型的过程,详细展示了从环境搭建、数据集准备到模型训练的全流程。

九月镇灵将的博客 1032

【FPGA教程案例59】深度学习案例6——基于FPGA的CNN卷积神经网络之整体实现

在课程,我们对的基本原理有了初步认识。在上一个课程,我们完成了CNN的Relu激活层、pool池化层、卷积层以及图像输入层的实现,如下图所示:在本课程中,我们将上述四个模块结合起来,构建一个简单的CNN卷积神经网络。...

FPGA/MATLAB学习教程/源码/项目合作开发 2635

进程间通信之无名管道和有名管道

无名管道和有名管道一、无名管道1.什么是无名管道2.局限性3.pipe()函数4.流程图5.例程二、有名管道1.什么是有名管道2.mkfifo()函数3.流程图4.例程   无名管道(匿名管道)和有名管道(命名管道)是Linux系统内核的特殊文件,用于进程之间的通信。 一、无名管道 1.什么是无名管道     无名管道(匿名管道)的实质是一个内核缓冲区,进程以先进先出(FIFO, First In...

Mo 1616

七天征服AutoSAR/SomeIP_01速成配置并代码生成

本文为AutoSAR中SomeIP配置开发的实操指南摘要,重点介绍通过通信矩阵快速构建SomeIP工程的方法。核心内容包括:1)基于Excel通信矩阵生成系统描述文件(arxml);2)在AutoSAR工具中导入文件自动生成协议栈配置,涵盖ETHIF、SoAd等模块;3)关键报错处理(COM/PDUR/SOAD/SD模块的配置修正);4)SomeIPXF的数据编解码配置;5)SWC组件与RTE任务映射。教程强调"先完成再完美"的实践原则,指导开发者快速生成基础代码框架,为后续协议调试奠定

大叔带刺的博客 302

管道

进程之间通讯(IPC,interprocess communication)管道管道是内核维护的一种特殊的文件,主要用来作为进程间传递数据的主要方式,分为无名管道和命名管道(FIFO)。在shell里面的一些过滤程序,就是管道,比如|grep。 管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,

奔跑少年 392

fanuc机器人KAREL中 函数的应用

本次课程讲解编程的思路。很多的同学都玩过积木,一个一个的模块逐渐累积起来,通过彼此之间的相互联系,最终形成一个完整的整体。其实编程也是这样。 将一个对象根据其特点进行模块化拆分,尤其是一些特点非常相似的内容,将其变成一个模块。然后通过传递参数,实现不同的功能,这就是模块化编程。

haier123888的博客 2743

重复点击提交、产生多笔数据、保持数据只操作一次---->接口幂等性校验

幂等校验一、工作真实场景 + 常出现场景二、工作解决方案 + 百度解决方案 一、工作真实场景 + 常出现场景 真实场景:在一次工作中进行成品出库创建成品出库单时,手抖了一下,重复点击了两次确定(提交表单)。结果很神奇的发现居然产生了两笔一模一样的数据(流水号都一样),当时就很懵逼,稍作思考,想想应该是在同一时刻创建了两个出库单。感觉很有意思(因为之前没有遇到过,写代码的时候也没有考虑到这个问题的发生),后面换了一种方式复现场景:提交表单时多次点击Enter按钮,还是会产生多笔重复数据。 常见场景: 订单接

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 6万+

进程间通信——管道通信

管道通信(Pipe Communication)是操作系统中进程间通信(IPC,Inter-Process Communication)的一种基本方式。它可以让一个进程的输出作为另一个进程的输入并允许两个进程通过一个缓冲区进行通信,实现数据互传,这个缓冲区就是管道。

weixin_75197906的博客 1346

ShardingSphere 5.3 系列Spring 配置升级指南 | Spring Cloud 47

在 `5.3.0` 版本以前,`ShardingSphere-JDBC` 同时支持 `Java API`、`YAML`、`Spring Boot Starter` 和 `Spring Namespace` 等配置方式。 - 当新增或更新 API 时,需要调整多项配置文件,工作量大 - 社区需要维护多重配置文档和示例 - `Spring Bean` 生命周期管理容易受到项目其他依赖的影响,比如 `PostProcessor` 无法正常执行 - `Spring Boot Starter` 和 `Spring N

gmHappy 2万+

Linux&Apue(0.5.1):进程间通信管道(无名&有名)基础编程

(一)

NeWorld20的博客 398

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

linux程序间管道通信,linux进程间通信——管道 详解

管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入。常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建。Linux管道的实现机制在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,...

weixin_34005394的博客 885

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux系统编程 [进程通信——管道]

进程间通信

wuyou的博客 470

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Linux内核系列】:进程间通信:匿名管道实现通信

一文帮组你掌握Linux下的匿名管道内容!

努力努力再努力wz的博客 1825

【Linux】进程间通信之管道pipe与FIFO

管道pipe是UNIX系统IPC进程间通信的最古老形式,并且所有UNIX系统都提供此种通信机制。管道有下面两种局限性: 1、历史上,管道是半双工管道,数据只能在一个方向上流动,某些系统则提供了全双工管道。 2、管道只能在具有公共祖先的进程之间使用。半双工管道虽然有自身的局限性,但仍是最常用的IPC形式。每当你在管道线中键入一个由shell执行的命令序列时,shell为每一条命令单独创建一进程,然

Making Life Better. Making Others Better. 2118

【牛客网C++服务器项目学习】Day6-有名管道、内存映射、信号机制

项目学习地址:【牛客网C++服务器项目学习】 有名管道: 有名管道特点: 有名管道是FIFO文件,存在于文件系统中,可以通过文件路径名来指出。 管道文件仅仅是文件系统中的标示,并不在磁盘上占据空间。在使用时,在内存上开辟空间,作为两个进程数据交互的通道。 有名管道可以在不具有亲缘关系的进程间进行通信。 相关接口: 在shell中使用mkfifo 命令 mkfifo filename int mkfifo(const char *pathname, mode_t mod.

garbage_man的博客 1399

linux管道的那点事

管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点: *** 数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道。 *** 管道只能用于父子进程或者兄弟进程间通信。,也就是说管道只能用于具有亲缘关系的进

zqf_office的专栏 283

进程间通信与匿名管道详解

先交代一下环境:语言从 C 切换成 C++,操作系统从 CentOS 7 换成 Ubuntu 24.04(内核 6.8.0)。CentOS 7 已经停更了——虽然有些企业还没换,但 VS Code 新版本已不再支持 CentOS 7(它自带的 glibc 太老了),连都连不上。所以换。前面学过的所有系统调用接口在 Ubuntu 上 100% 一样——内核接口不随发行版变,平滑切换。

2203_75397752的博客 431
上一篇: 进程的基本概念和几种通信方式
下一篇: 有名管道的实现
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值