我正在研究一個簡單的並行應用程序,我希望使用單個進程來維護有關工作進程系列的狀態信息。建立一個POSIX消息隊列似乎比較容易,在這個隊列中,所有的工蜂都可以定期向狀態維護人員發送更新。我的問題? POSIX消息隊列必須有一個名稱。我不想選一個名字;我所關心的是獲得一個唯一的消息隊列,就像我使用SYSV消息隊列3210一樣。對於唯一的文件名我可以使用mkstemp(3)
或者我可以使用tmpfile(3)
的唯一打開文件描述符。 我應該如何獲得唯一的POSIX消息隊列?如何獲得唯一的POSIX消息隊列?
5
A
回答
3
我不想選一個名字;我所關心的是獲得一個唯一的消息隊列,就像我會使用SYSV消息隊列與IPC_PRIVATE
那麼,與POSIX消息隊列,您做必須指定一個名字,但是你沒有以保留它,也不允許其他人按該名稱使用相同的隊列。
IPC_PRIVATE模仿
做什麼mkstemp
和tmpfile
引擎蓋下做的。借用任何「tmp」/「temp」名稱選擇算法來生成「/ reasonably_unique」,其中O_CREAT | O_EXCL爲mq_open
,然後mq_unlink
它。然後子工作進程可以繼承消息隊列描述符。
警告:根或你的EUID不見了,你知道你在做什麼,並跳到mq_open
和mq_unlink
之間?是。
替代實施
或者,使用SOCK_DGRAM socketpair
或pipe
代替。那些提供類似語義的POSIX消息隊列— attr.mq_msgsize
變成SO_SNDBUF/SO_RCVBUF或者尊重PIPE_BUF的協議,mq_notify
成爲I/O可選性(可能已經是這種情況)—儘管您確實會丟失消息優先級。
相關問題
- 1. POSIX消息隊列安全
- 2. 如何清除POSIX消息隊列?
- 3. Azure隊列唯一消息
- 4. POSIX消息隊列的替代
- 5. POSIX消息隊列文件夾
- 6. POSIX消息隊列QSIZE查詢
- 7. POSIX消息隊列位於哪裏(Linux)?
- 8. 調整posix消息隊列中的消息數
- 9. Boost消息隊列不基於POSIX消息隊列?不可能選擇(2)?
- 10. 應該使用什麼SystemV消息隊列或POSIX消息隊列?
- 11. POSIX消息隊列errno 90消息太長
- 12. 從POSIX隊列接收消息時如何節省內存?
- 13. 如何獲得在蔚藍的隊列中的消息數
- 14. jboss7 - 我如何獲得隊列中的消息數量?
- 15. 如何獲得消息而不在Activemq中創建隊列
- 16. 的ActiveMQ:如何獲得一個隊列中的所有消息接收器(JAVA)
- 17. 當發送消息隊列POSIX時接收額外的字符
- 18. 消息隊列中的作業的唯一ID?
- 19. 如何在Linux中使用POSIX API發送帶消息隊列的整數?
- 20. 你有什麼使用sysv/posix消息隊列?
- 21. POSIX消息隊列 - 重新啓動後它仍然存在嗎?
- 22. 使用POSIX消息隊列運行JNA示例
- 23. Linux上可以使用POSIX消息隊列嗎?
- 24. POSIX消息隊列 - 打開時出錯:無效參數
- 25. 獲得響應的消息隊列內的鐵軌控制器
- 26. 使用POSIX消息隊列而不是TCP套接字 - 如何建立「連接」?
- 27. 如何查看隊列中的消息
- 28. 獲取RabbitMQ隊列中的消息數
- 29. 獲取完整的mqtt消息隊列?
- 30. 如何獲得排隊使用ServiceThrottlingBehavior時的消息