消息队列和Linux中的管道有什么区别?
直接脑补,如果你所说的是 posix 消息队列(不是 SysV 那一种):
select()
、poll()
、epoll()
等函数也支持 mqd_t
。实际上,它们是非常不同的东西。
最大的实际区别在于管道没有“消息”的概念,它只是一个用于write()
写入字节和read()
读取字节的管道。接收端必须知道哪个数据片段在您的程序中构成了“消息”,并且您必须自行实现该功能。此外,字节的顺序是固定的:字节将按照您放置它们的顺序输出,并且通常它只有一个输入和一个输出。
消息队列用于传输具有类型和大小的“消息”。因此,接收端只需等待特定类型的一个“消息”,而无需担心是否完整。多个进程可以向同一个队列发送和接收。
有关更多信息,请参见man mq_overview
和/或man svipc
。
read()
函数一样。他们使用了错误的函数吗?是否有返回/接收某些结构体的函数可用? - Hi-Angel