本文主要是介绍进程间通信--pipe/msgqueue/sems/shm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
IPC inter-process communication
进程间通信是指在不同进程之间传播或交换信息
进程间通信可分为以下几类
- 管道(匿名管道和命名管道)
- system IPC
- 消息队列(用于数据传输)
- 共享内存(用于数据共享)
- 信号量(用于事件通知)
- POSIX IPC
- 消息队列
- 共享内存
- 互斥量
- 条件变量
- 信号量
- 读写锁
主要介绍常用的如管道、消息队列、信号量、共享内存这几个。
一、管道
管道通常指匿名管道,它也是Unix系统最古老的IPC形式。
1、特点:
它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
2、创建管道
- 创建匿名管道
函数原型:
#include<unistd.h>
int pipe(int pipefd[2]);
参数:
pipefd[2]:文件描述符数组,fd[0]表示读端,fd[1]表示写端
返回值:
成功返回0,失败返回错误代码
要关闭管道关闭这两个文件描述符即可。
这篇关于进程间通信--pipe/msgqueue/sems/shm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!