之前说明了进程控制原语,但是这些进程之间交换信息的唯一途径就是传送打开的文件,可以由fork或exec传送,也可以通过文件系统来传送,接下来说明进程之间相互通信的其他技术-进程间通信(IPC)

管道:

管道是unix中IPC最古老的形式,管道有以下几点局限:

1.历史上是半双工的

2.管道只能在具有共同父辈的两个进程间使用。

尽管有这些局限性,半双工管道仍是最常见的IPC形式,每当在管道中键入一个命令序列,让shell执行时,shell都会为每一条命令单独创建一个进程,然后用管道将前一条命令进程的标准输出与后条命令的标准输入相连接。

管道是通过调用pipe函数创建的。

#include <unistd.h>

int pipe(int fd[2]);

经由参数fd返回两个文件描述符:fd[0]为读而打开,fd[1]为写而打开,fd[1]的输出是fd[0]的输入。

下图给出了两周过描述半双工管道的方法。左图显示管道的两端在一个进程相互连接,右图则强调数据需要通过内核在管道中流动。

单个进程中的管道几乎没有任何作用,通常进程会先调用pipe,接着调用fork,从而创建父进程到子进程的IPC通道。下图显示了这种情况

对于从父进程到子进程的管道,父进程关闭管道的读端(fd[0]),子进程关闭写端(fd[1])。对于子进程到父进程的管道,父进程关闭fd[1],子进程关闭fd[0]。

当管道的一端被关闭后,下列两条规则起作用:

1.当读(read)一个写端被关闭的管道时,在所有数据都被读取后,read返回0,表示文件结束。

2.如果写(write)一个读端已经被关闭的管道,则产生信号SIGPIPE。

转载于:https://www.cnblogs.com/sichenzhao/p/9320354.html

unix环境高级编程-进程间通信相关推荐

  1. UNIX环境高级编程---进程间通信总结

    进程间通信 1 管道 匿名管道 命名管道 2 消息队列 3 信号量 POSIX信号量 有名信号量 无名信号量 有名信号量和无名信号量的公共操作 4 共享内存 5 信号 相关函数 6 套接字 针对 TC ...

  2. unix环境高级编程 pdf_UNIX系统编程宝典,每一本都值得程序员珍藏

    这几本UNIX系统编程宝典,重印无数次,几代程序员都视如珍宝的几本书,小编在出版圈里快十年了,见证了这本书图灵版.异步社区版的出版.营销,对这套书倾注了一定的感情.今天继续分享给你们,好书总会有人还不 ...

  3. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. 《Unix环境高级编程》学习笔记:从点到面

    以前在课堂上学习过<Unix初级教程(第四版)>,对于Unix有了一点了解.由于以后使用的需要,要对它进行比较深入的学习,为此需要阅读不少的书籍,这本<Unix环境高级编程>便 ...

  5. Unix环境高级编程 笔记

    Unix环境高级编程(第二版)学习笔记 这是一次较长时间的整理,然而跳跃了一些章节和很多知识点,仍然是很不完善很不全面的. 前言 操作系统某些问题 严格意义上,可将操作系统定义为一种软件,它控制计算机 ...

  6. 《UNIX环境高级编程(第3版)》

    <UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...

  7. UNIX环境高级编程-第三版

    Unix环境高级编程-第三版 之前学习了<Linux系统编程>对于常见的概念和函数都有了基础的认知,这里准备通过这本书,深入学习系统API相关内容.笔记内容会有所倾向,不会严格反应书本内容 ...

  8. unix环境高级编程(上)-文件篇

    目录 前言 unix基础知识 unix标准化和实现 unix提供的文件IO 文件和目录 标准IO 系统数据文件 前言 笔者将<unix环境高级编程>主要内容总结为三篇:文件篇,进程篇,高级 ...

  9. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

最新文章

  1. 《一起》个人进展——Day02
  2. 不同特权级代码段之间的跳转
  3. GP官网上的TEE学习课程和费用介绍
  4. python 中将大列表拆分成小列表
  5. windows phone 学习(4)
  6. 刚入行的UI设计师,通过临摹优秀UI KIT作品开始
  7. 面向对象的基本概念(二)--UML.类之间的关系
  8. 【EMNLP 2020】篇章要素识别和篇章结构评分(上)
  9. 服务器硬盘整体ghost,ghost备份整个硬盘| 全盘镜像ghost步骤
  10. 白日门手游luac文件加密怎么解密_浅析android手游lua脚本的加密与解密
  11. 文本转语音的接口(开放免费)
  12. 生成随机的姓名、电话
  13. linux中括号的用法,全面梳理linux下shell中各种括号的作用和用法
  14. 浅谈如何加强企业成本管理
  15. Bugku--散乱的密文
  16. 人工神经网络算法的应用,神经网络算法应用案例
  17. iOS 15个人热点无法连接?10个修复技巧分享
  18. unity打包安卓显示手机顶部状态栏
  19. 求电子在线商城后台管理系统
  20. Qt编写视频监控系统69-录像计划(支持64通道7*24录像设置)

热门文章

  1. java filehelper_Spring 发送邮件 使用File指定附件
  2. Docker 安装MySQL以及外部访问
  3. python中%是什么意思_python中%代表什么意思?
  4. oracle 分布键,DWS使用技巧:根据ORACLE主键和唯一健批量修改DWS分布列字段的方法...
  5. vr降噪器英文是什么_CR渲染器和VR渲染器在3d效果图上的区别
  6. BP神经网络 PID控制simulink仿真
  7. vim调用python显示json数据
  8. 似然函数代码c语言,从似然函数到EM算法(附代码实现)
  9. java opp 是什么意思_Java面向对象学习
  10. 数据结构实验之二叉树八:(中序后序)求二叉树的深度