一、进程间通信(IPC)介绍
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。
IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。
二、管道
管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。
1、特点:
它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
2、原型:
1 #include 2 int pipe(int fd[2]); // 返回值:若成功返回0,失败返回-1
当一个管道建立时,它会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开。如下图:
若要数据流从父进程流向子进程,则关闭父进程的读端(fd[0])与子进程的写端(fd[1]);反之,则可以使数据流从子进程流向父进程。
三、命名管道
运行此代码时,会卡住(即阻塞),只有当运行一个以可写此文件的点C文件时(如下),上述代码才不会被阻塞
读5次数据:(其中每隔1秒钟写一次,防止数据冲突)
代码参考:pjj@pjj-virtual-machine:~/文档/Perfect/IPC/read.c
pjj@pjj-virtual-machine:~/文档/Perfect/IPC/write.c
四、消息队列
消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
1、特点
消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
对于B:
1、创建队列
2、写数据到队列
3、、、、、、、
审核编辑 黄宇
-
Linux
+关注
关注
87文章
11304浏览量
209476 -
IPC
+关注
关注
3文章
347浏览量
51916
发布评论请先 登录
相关推荐
评论