随进程持续:IPC对象一直存在直到最后一个进程关闭该对象为止(管道和FIFO)。
随内核持续:IPC对象存在一直到内核自举(系统重新启动)或者显示删除该对象。
如System V消息队列,System V信号量,System V共享内存是随内核持续的。
随文件系统持续:IPC对象一直存在到显式该对象。
Posix消息队列,信号量和共享内存至少是随内核持续的,但是如果使用映射文件实现的,那就是随文件系统持续的。
消息队列概述
消息队列可以认为是一个消息链表,可以向消息队列发送消息和读取消息。
消息赋予一个优先级,Posix读一个消息队列总是返回最高优先级的最早消息,System V消息队列读可以返回任意指定优先级的消息。
当往一个空队列放置一个消息时,Posix消息队列允许产生一个信号或者启动一个线程(Posix消息队列不提供这种机制。)
mq_open创建一个新的消息队列或者打开一个已存在的消息队列。
可能是某个文件系统中的真正路径名,也可能不是。
oflag可以设置只读,只写或者读写,或者非阻塞。
函数返回消息队列描述符,不一定是文件描述符。
mq_close关闭一个消息队列。
每个消息队列都有一个保存其当前打开着描述符的引用计数器,因而函数能够实现类似Unlink的功能。mq_unlink将消息队列引用计数减1。
mq_send和mq_receive函数向队列中放置一个消息,从队列中取走一个消息。
每个消息由一个优先级,返回时总是返回最高优先级的最早消息。
Posix消息队列和System V消息队列都不具备向接受者准备标识消息发送者。
消息队列限制
POSIX消息队列的异步事件通知:mq_notify
需要有一种方法通知何时有一个消息放置到了先前为空的对列,这样可以避免线程阻塞在读取函数。
POSIX消息队列允许异步事件通知,有两种选择
(1)产生一个信号给打开消息队列的进程。
(2)创建一个线程执行指定的函数
sigev_notify为SIGEV_SIGNAL时,当有信息放置到空消息时,发送一个信号。
sigev_notify为SIGEV_THREAD时,当有信心放置到空消息时,启动一个新线程。
待。