目录

1、Creat

2、Open

3、Read/Write

4、Wait

5、Close

6、Delete


  • 管道是 SylixOS 进程间通信的一种方式。
  • 管道分为匿名管道 pipe 和命名管道 fifo。
  • 管道有两个端口:读端和写端,并且只允许数据从写端流向读端,所以管道是一种流式设备。
  • 个人理解:可以将管道理解为是一种使用特殊结构读写的文件。

匿名管道实际操作可以使用标准文件读写函数(read、write),但并不存在于文件系统中,其使用是依赖于父子进程文件描述符的继承关系,因此只能用于父子进程通信。

对于没有血缘关系的进程(不存在文件描述符的继承),可以使用命名管道进行通信。

命名管道

创建一个命名管道可以使用 mkfifo 函数。通过mkfifo 函数可以指定命名管道的设备文件路径(存在于文件系统中), 其他进程可以使用标准的文件打开函数——open 函数打开该命名管道,然后使用 read 和write 函数对命名管道进行读和写操作。

1、Creat

创建命名管道类似于创建文件,因此命名管道的路径名存在于文件系统中,函数原型及介绍如下。

#include <unistd.h>
int mkfifo(const char *pcFifoName, mode_t mode);
函数 mkfifo 原型分析:
  • 此函数成功返回错误号 0,失败返回-1 并设置错误号;
  • 参数 pcFifoName 指定了命名管道的设备文件路径;
  • 参数 mode 指定了命名管道的设备文件模式,与 open 函数的模式位相同。

2、Open

由于命名管道存在于文件系统中,所以可以使用标准的文件打开函数——open 函数打开命名管道。
调用 open 函数时参数 iFlag 是命名管道的打开标志,参数 iFlag 除了可以使用表 1 中匿名管道的文件标志,还可以使用表 2 中的标志。

3、Read/Write

命名管道的读和写操作分别使用标准的文件读写函数——read 和 write 函数。

read、write函数的实现可参考“SylixOS文件I/O函数”中的对应描述:https://blog.csdn.net/Liangren_/article/details/107818912

4、Wait

在命名管道为空或满时,读或写命名管道操作将被阻塞(除非使用 open 函数打开命名管道时参数 iFlag 指定了 O_NONBLOCK 选项),而等待一个命名管道可读或可写,可以调用 select 函数。
当 select 返回时,我们可以得知多少文件描述符就绪了,以及哪些文件描述符就绪了,使用这些就绪的文件描述符可以进行 read、write 等操作。

5、Close

关闭一个命名管道可以使用标准的文件关闭函数——close 函数。

close函数的实现可参考“SylixOS文件I/O函数”中的对应描述:https://blog.csdn.net/Liangren_/article/details/107818912

6、Delete

命名管道的删除使用标准的文件删除函数——unlink 函数。

进程通信——命名管道相关推荐

  1. Linux进程通信——匿名管道、命名管道、管道的特性和共享内存

    Linux进程通信--匿名管道.命名管道.管道的特性和共享内存 一.管道 1.1 什么是管道? 1.2 匿名管道 <1> 匿名管道参数说明 <2> fork共享管道原理 < ...

  2. 进程的通信 - 命名管道

    命名管道概述 命名管道(Named Pipes),顾名思义,一个有名字的管道.命名管道的名字主要是用于确保多个进程访问同一个对象.命名管道不仅可以在同一台计算机之间传输数据,甚至能在跨越一个网络的不同 ...

  3. Linux进程通信之管道

    进程间完成数据传递需要借助操作系统提供的特殊的方法,比如:文件.管道.信号.共享内存.消息队列.套接字.命名管道等.但现在常用的进程间通信方式有: 管道 – 使用最简单 pipe 管道一般读写行为 F ...

  4. 6.进程通信 无名管道 有名管道

    进程间通信(IPC,InterProcess Communication) 概念:就是进程和进程之间交换信息. 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共享内 ...

  5. 【Linux系统编程】进程通信之管道

    1.进程间通信介绍 1.1 进程通信的基本概念 在之前我们已经学习过进程地址空间.Linux 环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不 ...

  6. linux 命名管道 c语言 不同进程,进程间通信 - 命名管道实现

    命名管道概述 命名管道是通过网络来完成进程之间的通信的,命名管道依赖于底层网络接口, 其中包括有 DNS 服务,TCP/IP 协议等等机制,但是其屏蔽了底层的网络协议细节, 对于匿名管道而言,其只能实 ...

  7. php管道邮件,php进程通信-PIPE管道通信

    上一篇文章讲到了php进程通信的进程信号通信方法,本文介绍的是有名管道: 管道通信,主要是利用文件,写入以及读取来进行通信的, 通俗来讲,就是A进程在1.txt写入1,B进程读取1.txt,就能读取到 ...

  8. linux通信管道破裂,Linux下进程通信之管道

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...

  9. C# 管道通信-命名管道(一)

    最近在做一个应用程序,涉及到两个应用程序之间的通讯,就想到了用C#的命名管道的方式来实现,经过一番小折腾,总算实现了,现把一些主体的代码粘贴出来与大家分享: 管道通讯会涉及到client端和Serve ...

最新文章

  1. 半导体二极管的直流电阻和动态电阻如何区别?
  2. jittor拟合sin函数
  3. 表的插入、更新、删除、合并操作_19_通过表关联删除记录
  4. 利用rpm包搭建lamp环境及论坛的创建
  5. 坐标轴 日期格式_Excel图表技巧之不连续的日期坐标轴怎么显示
  6. finalshell一直弹出输入密码_Linux 密码忘了怎么办?明明输入的密码是对的为啥一直过不去?...
  7. java在集合中的方法变动的类_java中级面试题 之基础篇
  8. win7(64位)php5.5-Apache2.4-环境安装
  9. 在虚函数 声明中写override的作用
  10. linux+极点五笔输入法,Linux技巧之Ubuntu11.04下安装极点五笔输入法
  11. 前端程序员拿到新电脑第一天,该做些什么?
  12. java计算机毕业设计科院垃圾分类系统源码+数据库+系统+lw文档+mybatis+运行部署
  13. Mysql学习记录【Mysql字符集】
  14. 可视化架构设计——C4介绍
  15. 微信小程序 输入车牌号(有新能源)
  16. LKD3568 Android11 系统架包使用步骤
  17. 【硬十宝典】——1.2【基础知识】开关电源各种拓扑结构的特点
  18. 计算机南方电网试题,南方电网考试真题
  19. 使用matlab设计IIR巴特沃斯低通滤波器
  20. 因计算机丢失msvcp120d.dll,计算机中缺失MSVCP120D.dll和MSVCR120D.dll怎么解决

热门文章

  1. excel的vba数组
  2. oracle 中exits 和in的的使用
  3. 艾美捷热转移稳定性检测试剂盒:简单、灵敏、均匀的荧光测定法
  4. jq获取id的名称_jquery获取节点名称
  5. (转载)深度剖析 | 可微分学习的自适配归一化 (Switchable Normalization)
  6. 虚拟现实开发一些建议
  7. ios企业签名在线签名网站有哪些?
  8. JAVA编写的基于正则表达式的SNL词法分析器
  9. 网络编程(客户端和服务器的编写)
  10. 如何用 AI 练英语口语?