我正在使用msgget()系統調用來獲取新的消息隊列。我在那裏使用了IPC_CREAT & IPC_EXCL標誌。像 message_queue = msgget(ftok("/tmp", 100), (0666 | IPC_CREAT | IPC_EXCL));
現在,當我的prog存在意外時,msg隊列仍然存在,我無法重新創建msg隊列。所以,我的問題是「我如何找回現有的msg隊列ID?」如何找回現有的消息隊列ID
順便說一下,msg隊列在哪裏存儲其ID?
我正在使用msgget()系統調用來獲取新的消息隊列。我在那裏使用了IPC_CREAT & IPC_EXCL標誌。像 message_queue = msgget(ftok("/tmp", 100), (0666 | IPC_CREAT | IPC_EXCL));
現在,當我的prog存在意外時,msg隊列仍然存在,我無法重新創建msg隊列。所以,我的問題是「我如何找回現有的msg隊列ID?」如何找回現有的消息隊列ID
順便說一下,msg隊列在哪裏存儲其ID?
Regd「我怎樣才能找回現有的msg隊列的ID?」
從人msgget
If msgflg specifies both IPC_CREAT and IPC_EXCL and a message queue already exists for key, then msgget() fails with errno set to EEX-
IST. (This is analogous to the effect of the combination O_CREAT | O_EXCL for open(2).)
嘗試沒有IPC_EXCL標誌。
Regd。哪裏味精隊列從人PROC
/proc/sysvipc
Subdirectory containing the pseudo-files msg, sem and shm. These files list the System V Interprocess Communication (IPC)
objects (respectively: message queues, semaphores, and shared memory) that currently exist on the system, providing similar
information to that available via ipcs(1). These files have headers and are formatted (one IPC object per line) for easy under-
standing. svipc(7) provides further background on the information shown by these files.
不要試圖第二次重新創建消息隊列。第二次使用IPC_CREAT | IPC_EXCL
會導致msgget
失敗。
如果msgflg的手冊頁同時指定IPC_CREAT和IPC_EXCL和消息隊列 已經存在鍵,然後msgget()失敗,錯誤號集到EEXIST。 (這類似於組合O_CREAT的效果|。O_EXCL 爲開放(2))
所以,你仍然可以繼續使用msgget
第二次,但只使用IPC_CREAT
標誌。 還要檢查ftok
和msgget
的返回值,並將錯誤值(如果有)與手冊頁進行比較。還請檢查errno
。
此外,如果您有與現有的消息隊列太麻煩,你可以用IPC_RMID
標誌
而且,對方的回答一起調用msgctl
爲味精的隊列都存儲在那裏將其刪除。你很可能會試圖刪除令人不安的消息隊列:)但是請注意,它們只是讀取虛擬文件系統/ proc上的文件!
@JohnG很高興它幫助你約翰! :) – 2012-04-05 10:26:25
存儲其ID
下面是一個試圖回答這個問題,如果它是有用的,功勞應該去The Linux Programmer’s Guide。如果它被認定爲不相關或什麼的,那麼錯誤就是我的。
ipcs命令可用於獲取所有System V IPC對象的狀態。
ipcs -q: Show only message queues
ipcs -s: Show only semaphores
ipcs -m: Show only shared memory
ipcs --help: Additional arguments
ipcrm命令可用於從內核中刪除IPC對象。雖然IPC 對象可以通過用戶代碼中的系統調用(我們稍後會看到如何)來移除,但經常會出現需要 ,尤其是在開發環境中,需要手動移除IPC對象。
它的用法很簡單:
ipcrm <msg | sem | shm> <IPC ID>
thnx爲答覆** user967552 **。這非常有幫助。 – JohnG 2012-04-05 08:23:26