簡體   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