消息队列:
消息队列是消息的链接表,是存在内核中的,一个消息队列是由一个标识符(ID号)来标识。
特点:
消息队列是一种在进程之间传递消息的通信机制,具有以下特点:
- 异步通信:发送消息到消息队列后,发送方可以继续执行其他任务,不需要立即等待接收方处理消息。接收方可以在合适的时候从队列中获取消息并处理。
- 解耦:消息队列可以将发送方和接收方解耦,使它们不需要直接知道对方的存在。发送方只需要将消息发送到队列,而接收方可以从队列中获取消息进行处理,双方无需直接通信。
- 缓冲:消息队列可以作为一个缓冲区,即使发送方发送消息速度快于接收方处理消息的速度,消息也不会丢失,因为消息会暂时存储在队列中。
- 通信方式:消息队列通常支持多对多的通信方式,多个发送方可以向同一个队列发送消息,多个接收方也可以从同一个队列获取消息。
- 持久化:有些消息队列系统支持消息的持久化,即使接收方不在线,消息也不会丢失,直到接收方再次上线并处理消息。
- 消息优先级:有些消息队列支持消息的优先级,可以根据消息的重要性或紧急程度来处理消息。
- 可靠性:一些消息队列系统提供了消息传递的可靠性保证,确保消息能够安全地传递到接收方,避免消息丢失或重复传递。
key的使用:
ftok 参数fname:指定的文件名(已经存在的文件名),一般使用当前目录,如:
key_t key;
key = ftok(".", 1); 这样就是将fname设为当前目录。
id:子序号。虽然是int类型,但是只使用8bits(1-255)。
ftok 返回值
成功:返回key_t值(即IPC 键值)
出错:-1,错误原因存于error中
msgget 功能
用于创建一个新的或打开一个已经存在的消息队列,此消息队列与key相对应。
msgget 头文件及原型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>
msgget 参数key: 函数ftok的返回值(ID号)或IPC_PRIVATE。
msgrcv
msgrcv 功能
从标识符为msqid的消息队列读取消息并存于msgp中,读取后把此消息从消息队列中删除。
msgsnd
将msgp消息写入到标识符为msqid的消息队列。