繁体   English   中英

使用共享内存/信号量的消息队列,如何检查是否没有进程连接到队列?

[英]Message queue using shared memory/semaphore, how to check if if there is no process connected to the queue?

typedef struct
{
    char data[MESSAGE_SIZE];
} MESSAGE;

typedef struct
{
    sem_t sem_send;
    sem_t sem_receive;
    MESSAGE messages[];
} MQ;

目前正在处理消息队列,我想删除队列但为此我需要销毁信号量(sem_destroy)然后 shm_unlink 但我需要确保当前没有进程连接到队列

请问我怎样才能做到这一点?

也许您想要的是 UNIX 套接字而不是消息队列。 检查man 7 unix ,有一个如何使用它的例子。 使用 UNIX 套接字,您可以获得:

  1. 双向通信(您的代码表明您需要它)。
  2. 连接/断开检测(即使在错误/中止情况下)。
  3. (SOCK_SEQPACKET) 的数据包行为。 就像一个消息队列。

消息队列不会告诉任何有关连接到它的其他进程的信息。 消息队列可以在没有任何进程附加的情况下存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM