【操作系统之三】Linux下进程间通信-IPC(Inter-Process Communication)

管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字

参考:
Linux环境进程间通信(一)管道及有名管道
Linux环境进程间通信(二): 信号上

Linux环境进程间通信(二): 信号下

Linux环境进程间通信(三)消息队列
Linux环境进程间通信(四)信号灯
Linux环境进程间通信(五): 共享内存上

Linux环境进程间通信(五): 共享内存下
Linux环境进程间通信(六): socket

原文地址:https://www.cnblogs.com/cac2020/p/11757576.html

时间: 2024-10-28 11:35:09

【操作系统之三】Linux下进程间通信-IPC(Inter-Process Communication)的相关文章

linux下进程间通信IPC几种方式性能比较

在项目中,经常会遇到单机上进程间的通信,常用的进程间通信方式一般有以下几种 1 socket 2 unixsocket 3 共享内存(share-memory) 4 管道(pipe) 5 消息队列(message-queue) 6 文件(file) 7 消息总线(比如zeromq) 8 其他中间件(比如redis, memchache, 数据库等) 如果项目仅仅是消息的传递,对性能要求不高,则以上每种方式都可以实现进程间通信,我们可以选择较容易实现的方式来运用. 如果项目对消息传递性能要求很高,

linux下六大IPC机制【转】

转自http://blog.sina.com.cn/s/blog_587c016a0100nfeq.html linux下进程间通信IPC的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信:信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身:linux除了支持Un

2017-2018-1 20155222 《信息安全系统设计基础》第10周 Linux下的IPC机制

2017-2018-1 20155222 <信息安全系统设计基础>第10周 Linux下的IPC机制 IPC机制 在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法.在linux下有多种进程间通信的方法:半双工管道.命名管道.消息队列.信号.信号量.共享内存.内存映射文件,套接字等等.使用这些机制可以为linux下的网络服务器开发提供灵活而又坚固的框架. 以上内容引用自CSDN 共享内存 共享内存是在多个

Linux下进程间通信之命名管道(FIFO)

匿名管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信.在命名管道(FIFO)提出后,该限制得到了克服.FIFO不同于pipe在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中.命名管道是一个设备文件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够相互通信. FIFO总是按照先进先出的原则工作,第一个被写入的数据将首先从管道中读出. Linux下有两种方式创建FIFO,一是在shell下交互的建立一个命名管道,二是在程序中使用系统函

Linux下进程间通信(嵌入式面试题)

          2016-10-28,14:53,Fri 题目:c编程---在终端输入(Num,Cmd),Num代表队员号,Cmd代表命令.Cmd为1,奔跑; Cmd为2,显示已奔跑时间(精确到ms); Cmd为3,停止奔跑并显示所有队员的状态(状态0:未奔跑; 状态1:正在奔跑; 状态2:奔跑过但已停止). 单进程:每个队员匹配一个信息结构体:Struct{int num;int cmd;int time;int status};使用switch(msg[num].cmd) 执行对应操作来

Linux下进程间通信之消息队列

消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法.每个数据块都被认为是一个有类型,接受者进程接受的数据块可以有不同的类型值.我们可以通过发送消息来避免命名管道的同步和阻塞问题.消息队列是基于消息的,且消息队列的读取不一定是先入先出.每个消息的最大长度是有上限的,每个消息队列总的字节数是有上限的,系统上消息队列的总数也有一个上限. 具体步骤如下: 1):创建新消息队列或取得已存在消息队列 2):向队列读.写消息 3):设置消息队列属性 comm.h comm.c sever.c cli

Linux下进程间通信的方法--信号量

这里的信号量主要是在不同的进程之间使用. 需要四个操作 P操作 V操作 以及通过semctl调用command参数设置SETVAL来初始化信号量,在使用信号量之前必须要这么做. 并且可以通过semctl调用command设置为IPC_RMID来删除信号量ID: 因为库里没有定义union semun,因此需要自己定义. 用到信号量的三个函数 semget 用来创建一个新信号量或者取得一个已有信号量的键 semop 用来改变信号量的值 semctl 用来直接控制信号量信息,比如semop之前必须先

Linux下进程间通信之共享内存

共享内存便是在内存里申请一块空间,这块空间可以有多个进程拥有,其申请的空间必须是4096的整数倍,可以读写数据,其效率是system V 版本中几种通信方式间最高效的,但它的同步与互斥需要自己来维护,因此其常与信号量结合起来使用. 下面是一个简单的实现: shm.h shm.c 测试函数: 运行结果:

进程间通信 IPC(Inter-Process Communication)

目录 一.管道 二.FIFO 三.消息队列 四.信号量 五.共享存储 六.网络IPC:套接字 一.管道 管道是进程间通信中最古老的方式,所有UNIX都提供此种通信机制.管道有以下两种局限性: 历史上,他们是半双工的(即数据只能在一个方向上流动). 管道只能在具有公共祖先的两个进程间使用.通常,一个管道由一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了. FIFO没有第二种局限性. 尽管有这两种局限性,半双工管道仍然是最常用的IPC形式. 管道由pipe()函数创建: