Linux进程间通信

本文详细介绍了Linux进程间通信(IPC)的概念、目的和历史发展,包括匿名管道、命名管道、System V和Posix系列的通信方式,如消息队列、共享内存、信号量等。通过具体函数接口的解析,阐述了各种通信方法的使用和特点,帮助读者深入理解Linux进程间通信的本质和应用场景。
摘要由CSDN通过智能技术生成

进程间通信

(1)什么是进程间通信?
进程间通信(IPC)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。

(2)进程间通信的目的是什么?
进程间通信的目的一般有以下几点:

  • 数据传输:一个进程需要将它的数据发送给别的进程
  • 资源共享:多个进程间需要共享相同的资源
  • 进程控制:一个进程需要控制别的进程的执行(如Debug进程),此时控制进程需要拦截另外一个进程的所有陷入和异常,并及时知道它的状态改变
  • 通知事件:一个进程需要给另一个(组)进程发送消息,通知它(们)发生了某种事件(如子进程的终止通知父进程)

(3)进程间通信经历了哪几个阶段?

ps:想要快速学习Linux进程间通信接口接口使用的朋友,可以跳过这个问题

  1. 管道(pipe)是第一个广泛使用的IPC形式,既可以在程序中使用,也可以从shell中使用。管道的问题在于它们只能在具有共同祖先(父子进程关系)的进程间使用,最初的管道称为匿名管道,但是命名管道的出现解决了这个问题。
  2. System V进程间通信。System V消息队列是在20世纪80年代加入到System V内核中的。后面有陆陆续续的添加了这几种带有System V通信特色的进程间通信方式:共享内存,信号量。直到现在System V进程间通信系列的接口也是比较主流的。
  3. Posix进程间通信。Posix实时标准最初发布了Posix消息队列,它们可以用在同一主机上的不同进程而不受亲缘关系干扰(事实上只有匿名管道是受的),后来又加入了Posix信号量Posix共享内存区
  4. 互斥锁和条件变量事有Posix线程标准定义的两种同步形式。尽管往往用于线程间的同步,但是它们也能提供不同进程之间的同步。
  5. 读写锁是另外一种形式的同步。

(4)IPC对象的持续性分为哪些类型?
下图汇总了各种类型IPC对象的持续性:

IPC对象持续性

(5)进程间通信的方法有哪些?分别怎么用?

进程间通信的方法有:

  • 匿名管道
  • 命名管道
  • System V 消息队列
  • System V 共享内存
  • System V 信号量
  • Posix系列:消息队列,共享内存,信号量,互斥量,条件变量,读写锁

PS:下面我只讲解管道和System V系列的进程间通信方法

1.管道
定义:从一个进程连接到另一个进程的数据流称为管道。(‘|’是命令行中管道的符号)
eg:
命令: who | wc -l
匿名管道

创建匿名管道:
函数原型:int pipe(int fd[2])
参数说明:fd是文件描述符数组,fd[0]表示读端,fd[1]表示写端。
返回值:成功则返回0,失败则返回错误码。
匿名管道创建

使用实例:从键盘读取数据写入管道,然后从管道读取并写到屏幕上。

#include<stdio.h>
#in
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值