管道(pipe)允许两个进程进行通信,是早期 UNIX 系统最早使用的一种IPC 机制。管道为进程之间的相互通信提供了一种较为简单的方法,尽管也有一定的局限性。

在实现管道时,应该考虑以下四个问题:

管道允许单向通信还是双向通信?

如果允许双向通信,它是半双工的(数据在同一时间内只能按一个方向传输)还是全双工的(数据在同一时间内可在两个方向上传输)?

通信进程之间是否应有一定的关系(如父子关系)?

管道通信能否通过网络,还是只能在同一台机器上进行?

有两种常见类型的用于 UNIX 和 Windows 系统的管道:无名管道(普通管道)和有名管道,本节先讲解无名管道。

无名管道(普通管道)

普通管道允许两个进程按标准的生产者-消费者方式进行通信:生产者向管道的一端(写入端)写,消费者从管道的另一端(读出端)读。

因此,普通管道是单向的,只允许单向通信。如果需要双向通信,那么就要采用两个管道,而每个管道向不同方向发送数据。

下面我们讨论在 UNIX 和 Windows 系统上创建普通管道。在这两个程序实例中,一个进程向管道中写入消息 Greetings,而另一个进程从管道中读取此消息。

在 UNIX 系统上,普通管道的创建采用函数

pipe (int fd[])

这个函数创建一个管道,以便通过文件描述符 int fd[] 来访问:fd[0] 为管道的读出端,而 fd[1] 为管道的写入端。UNIX 将管道作为一种特殊类型的文件。因此,访问管道可以采用普通的系统调用 read() 和 write()。

普通管道只能

linux管道文件的实现原理,管道(无名管道)通信机制原理和实现详解相关推荐

  1. Linux Shell脚本入门教程系列之(八)Shell printf命令详解

    本文是Linux Shell脚本系列教程的第(八)篇,更多shell教程请看:Linux Shell脚本系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对She ...

  2. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解

    摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...

  3. linux内存管理机制以及free命令详解

    linux内存管理机制以及free命令详解 一.linux内存管理机制 1.物理内存和虚拟内存 直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存 ...

  4. linux内核移植与开发板,Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解

    Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解 [复制链接] 今天终于让Linux内核在飞凌的板子上跑起来了,想来也是艰辛,为了移植成功,断断续续做了将近两个月的努力,期间郁闷不可 ...

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

    00. 目录 文章目录 00. 目录 01. 管道概述 02. 管道创建函数 03. 管道的特性 04. 管道设置非阻塞 05. 附录 01. 管道概述 管道也叫无名管道,它是是 UNIX 系统 IP ...

  6. linux系统调用创建无名管道,无名管道系统调用

    本文关键字: linux 管道通信,linux 进程通信方式,无名管道 1.管道创建与关闭说明 管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1],其中fd ...

  7. linux无名管道实验代码,Linux 进程间通讯之创建无名管道和读写无名管道

    Linux进程间通讯的方式: 1. 管道(pipe)和有名管道(FIFO). 2. 信号(signal) 3. 消息队列 4. 共享内存 5. 信号量 6. 套接字(socket) 管道通讯: 无名管 ...

  8. linux C语言多线程库pthread中条件变量的正确用法逐步详解

    linux C语言多线程库pthread中条件变量的正确用法: 了解pthread常用多线程API和pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群. 关于条件变量的典型应用,可以参 ...

  9. Linux如何全盘搜索MySQL文件_Linux上的文件搜索命令实例详解

    locate 基础了解 locate命令搜索的后台数据库路径:/var/lib/mlocate/mlocate.db ls -hl /var/lib/mlocate total 1.2M -rw-r- ...

最新文章

  1. 国民技术芯片相关产业研发
  2. C++(十)——模板(上)
  3. 无人驾驶属于计算机科学吗,无人驾驶的车辆如何识别物体?科研笔记,原来车辆的眼睛是它...
  4. c ++查找字符串_C ++类和对象| 查找输出程序| 套装4
  5. 大数据技术周报第 002 期
  6. C# Monitor实现
  7. iPhone 12不支持双卡5G?媒体实测结论终于让大家安心
  8. php 正则表达式 文档,php的正则表达式完全手册
  9. 可视化model 参数
  10. 3个人的java 实验_20165104-JAVA第三次实验
  11. 彻底解决navicat连接mysql报错:1251Client does not support authentication protocol requested by server......
  12. 多层陶瓷电容器用处_陶瓷电容器作用详解
  13. 关于SSL认证的小坑 SSLPeerUnverifiedException
  14. uk码对照表_鞋码对照表_UK鞋码对照表
  15. 手机地理位置共享引发的不安全因素
  16. vue3.0需要学习的技术栈
  17. 线阵ccd模块LCAMV8-S11639-01/S11638高灵敏线阵图像传感器模组、驱动板
  18. python 实现自动化
  19. opencv for python (6) 改变一幅图的特定区域 (往一幅图片上加标志)
  20. php随机生成手机号码

热门文章

  1. 如何三个月培养出好美工
  2. LInux里重置Redis端口
  3. Andorid 关于PTRACE ptrace(PTRACE_TRACEME,0 ,0 ,0);
  4. 有可以间隔两个月提醒的电脑桌面便签软件吗?
  5. Neo4j 基础简介一
  6. 安装Hadoop系统并熟悉hadoop命令
  7. Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:
  8. C++中的using的作用
  9. Win10切换语言后设置系统时间、日期、货币
  10. 基本算法学习记录---Day2