目录

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. maven 父maven_Maven的春天
  2. php 正则替换 ubb,php实现过滤UBB代码的类
  3. 涉及反射/内省/泛型的优化实践
  4. html5在zigbee中起什么作用,ZigBee是什么?ZigBee在智能家居中扮演什么角色
  5. Pure公司发布机架规模FlashBlade对象与文件存储方案
  6. gulp排除已压缩文件思路
  7. discuz中写一个表单,数据存入到数据库中,再从数据库读出来显示在列表中
  8. 如何让NN分类输出[0,1]的值,并且相加等于1
  9. SCI从入门到精通(二)——如何阅读文献
  10. 计算机老师教育叙事,信息技术教育叙事范文10篇 初中
  11. 华为认证培训的话是远程还会面授好?
  12. 手机html送礼,送给家中“老顽童”的好礼物!这些手机的远程功能你会用嘛?...
  13. ps计算机设置,不仅要懂PS 浅谈修图电脑配置(基础篇)
  14. 高考过后,请问诸生接下来为什么而读书?
  15. 第六届信息类研究生学术论坛参赛有感
  16. 【win10专业版】win10系统下Office2013无法激活的解决方法
  17. 深度学习之参数计算(CNN为例)
  18. 01_03 获取答案
  19. JAVA的简单数据类型和复合数据类型
  20. TensorFlow系列专题(一):机器学习基础

热门文章

  1. 山东大学软件工程应用与实践——Spark
  2. 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse小工具
  3. 服务降级 熔断机制
  4. wtv 看比赛真爽。
  5. python commands_python-commands模块
  6. LabVIEW随前面板缩放前面板的所有对象
  7. Oracle存储过程-入门教程
  8. 移动应用加固:政务APP如何保障安全?
  9. C# Dictionary, ContainsKey
  10. NYOJ 971 爬行的蚂蚁