进程间通信包括管道、消息队列、信号量和共享内存。消息队列提供了一种从一个进程向另一个进程发送数据块的方法。每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。可通过发送消息来避免命名管道的同步和阻塞问题。
通常使用:
ipcs -q 查看消息队列
ipcrm -q msgid 删除消息队列
消息队列的基本操作(加载两个进程)如下:
程序代码:
comm.h
comm.c
server.c
client.c
测试:
进程通信之消息队列的特点:
(1)ipc资源的生命周期为“随内核”,且必须显式删除,而管道的生命周期是“随进程”,进程结束,则管道也结束;
(2)可用于非父子进程间通信;
(3)与管道不同的是,管道是基于字节流的,而消息队列是基于消息的,同时,消息队列的读取不一定是先入先出;
(4)与管道有相同的不足之处在于每个消息的最大长度是有上限的,每个消息队列总的字节数是有上限的,系统上消息队列的总数也有一个上限。