linux管道文件的实现原理,管道(无名管道)通信机制原理和实现详解
管道(pipe)允许两个进程进行通信,是早期 UNIX 系统最早使用的一种IPC 机制。管道为进程之间的相互通信提供了一种较为简单的方法,尽管也有一定的局限性。
在实现管道时,应该考虑以下四个问题:
管道允许单向通信还是双向通信?
如果允许双向通信,它是半双工的(数据在同一时间内只能按一个方向传输)还是全双工的(数据在同一时间内可在两个方向上传输)?
通信进程之间是否应有一定的关系(如父子关系)?
管道通信能否通过网络,还是只能在同一台机器上进行?
有两种常见类型的用于 UNIX 和 Windows 系统的管道:无名管道(普通管道)和有名管道,本节先讲解无名管道。
无名管道(普通管道)
普通管道允许两个进程按标准的生产者-消费者方式进行通信:生产者向管道的一端(写入端)写,消费者从管道的另一端(读出端)读。
因此,普通管道是单向的,只允许单向通信。如果需要双向通信,那么就要采用两个管道,而每个管道向不同方向发送数据。
下面我们讨论在 UNIX 和 Windows 系统上创建普通管道。在这两个程序实例中,一个进程向管道中写入消息 Greetings,而另一个进程从管道中读取此消息。
在 UNIX 系统上,普通管道的创建采用函数
pipe (int fd[])
这个函数创建一个管道,以便通过文件描述符 int fd[] 来访问:fd[0] 为管道的读出端,而 fd[1] 为管道的写入端。UNIX 将管道作为一种特殊类型的文件。因此,访问管道可以采用普通的系统调用 read() 和 write()。
普通管道只能
linux管道文件的实现原理,管道(无名管道)通信机制原理和实现详解相关推荐
- Linux Shell脚本入门教程系列之(八)Shell printf命令详解
本文是Linux Shell脚本系列教程的第(八)篇,更多shell教程请看:Linux Shell脚本系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对She ...
- linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解
摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...
- linux内存管理机制以及free命令详解
linux内存管理机制以及free命令详解 一.linux内存管理机制 1.物理内存和虚拟内存 直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存 ...
- linux内核移植与开发板,Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解
Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解 [复制链接] 今天终于让Linux内核在飞凌的板子上跑起来了,想来也是艰辛,为了移植成功,断断续续做了将近两个月的努力,期间郁闷不可 ...
- 【Linux系统编程】进程间通信之无名管道
00. 目录 文章目录 00. 目录 01. 管道概述 02. 管道创建函数 03. 管道的特性 04. 管道设置非阻塞 05. 附录 01. 管道概述 管道也叫无名管道,它是是 UNIX 系统 IP ...
- linux系统调用创建无名管道,无名管道系统调用
本文关键字: linux 管道通信,linux 进程通信方式,无名管道 1.管道创建与关闭说明 管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1],其中fd ...
- linux无名管道实验代码,Linux 进程间通讯之创建无名管道和读写无名管道
Linux进程间通讯的方式: 1. 管道(pipe)和有名管道(FIFO). 2. 信号(signal) 3. 消息队列 4. 共享内存 5. 信号量 6. 套接字(socket) 管道通讯: 无名管 ...
- linux C语言多线程库pthread中条件变量的正确用法逐步详解
linux C语言多线程库pthread中条件变量的正确用法: 了解pthread常用多线程API和pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群. 关于条件变量的典型应用,可以参 ...
- Linux如何全盘搜索MySQL文件_Linux上的文件搜索命令实例详解
locate 基础了解 locate命令搜索的后台数据库路径:/var/lib/mlocate/mlocate.db ls -hl /var/lib/mlocate total 1.2M -rw-r- ...
最新文章
- 国民技术芯片相关产业研发
- C++(十)——模板(上)
- 无人驾驶属于计算机科学吗,无人驾驶的车辆如何识别物体?科研笔记,原来车辆的眼睛是它...
- c ++查找字符串_C ++类和对象| 查找输出程序| 套装4
- 大数据技术周报第 002 期
- C# Monitor实现
- iPhone 12不支持双卡5G?媒体实测结论终于让大家安心
- php 正则表达式 文档,php的正则表达式完全手册
- 可视化model 参数
- 3个人的java 实验_20165104-JAVA第三次实验
- 彻底解决navicat连接mysql报错:1251Client does not support authentication protocol requested by server......
- 多层陶瓷电容器用处_陶瓷电容器作用详解
- 关于SSL认证的小坑 SSLPeerUnverifiedException
- uk码对照表_鞋码对照表_UK鞋码对照表
- 手机地理位置共享引发的不安全因素
- vue3.0需要学习的技术栈
- 线阵ccd模块LCAMV8-S11639-01/S11638高灵敏线阵图像传感器模组、驱动板
- python 实现自动化
- opencv for python (6) 改变一幅图的特定区域 (往一幅图片上加标志)
- php随机生成手机号码