我正在使用System V来pipe理消息队列。 我成功地做了一个工作原型,一切都按预期工作,但我想有一个LIFO队列,而不是FIFO(预计最后msgsnd
消息发送是第一次读取msgget
)。
这可能吗 ?
是的,如果你管理正确的消息类型。 msgrcv
手册指定:
参数msgtyp指定所请求消息的类型,如下所示:
如果msgtyp为0,则接收队列中的第一条消息。
如果msgtyp大于0,则接收到类型为msgtyp的第一条消息。
如果msgtyp小于0,则接收到最小类型的第一个小于或等于msgtyp的绝对值的消息。
然后,如果您发送的邮件严格减少了msgtyp
,那么msgtyp
等于LONG_MIN
的提取将始终为您提供上次发送的邮件。 msgtyp
在这种情况下扮演着重要角色,1是最大的。
我认为这是不可能的。
术语“队列”是指FIFO。 查看wikipedia:
队列(抽象数据类型)
在计算机科学中,队列(/kjuː/ KYEW)是一种抽象数据类型或集合,其中集合中的实体保持有序,并且集合上的主要(或唯一)操作是添加实体后端位置,被称为入队(enqueue),以及从前端位置移除实体,称为出队(dequeue)。 这使队列成为先进先出(FIFO)数据结构。