52.Linux/Unix 系統程式設計手冊(下) -- POSIX 訊息佇列
阿新 • • 發佈:2019-02-03
1.概述 fork() 子程序會接收其父程序的訊息佇列描述符的副本,並且這些描述符會引用同樣的開啟著的訊息佇列的描述。子程序不會 繼承其父程序的任何訊息通知註冊。 當一個程序執行了 exec() 或終止時,所有其開啟的訊息佇列描述符會被關閉。關閉訊息佇列描述符的結果是程序在相應佇列上 的訊息通知註冊會被登出。 2.描述符和訊息佇列之間的關係 訊息佇列描述符和開啟著的訊息佇列之間的關係與檔案描述符和開啟著的檔案描述符之間的關係類似。訊息佇列描述符是一個程序級別的 控制代碼,它引用了系統層面的開啟著的訊息佇列描述符中的一個條目,而該條目則引用了一個訊息佇列物件。 3.Posix 和 System V 訊息佇列比較 Posix IPC 介面更加簡單,且與傳統 Unix 檔案模型更加一致,同時 Posix IPC 物件是引用計數的,這樣簡化了確定何時刪除一個物件的任務。 Posix 優勢: 1.訊息通知允許一個程序能夠在一條訊息進入之前為空的佇列時非同步的通知訊號或執行緒的例項化來接收通知。 2.在 Linux 上可以使用 poll(), select(), 以及 epoll() 來監控Posix 訊息佇列。System V 沒有這個特性 Posix 劣勢: 1.可移植性比較差 2.與Posix 訊息佇列嚴格按照優先順序排序相比,System V 訊息佇列能夠根據型別來選擇訊息的功能的靈活性更強。 mq_open(); mq_send(); mq_receive(); mq_close(); mq_unlink(); mq_getattr(); mq_setattr(); mq_notify(); mq_timedsend(); mq_timedreceive();