各位看官們,大家好,上一回中咱們說的是使用消息隊列進行進程間通信的例子,這一回咱們接著上一回的內容繼續說使用消息隊列進行進程間通信。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
我們在上一回中介紹了消息隊列的概念和相關函數的用法,這一回中我們通過具體的例子來說明如何使用消息隊列進行進程間的通信。下面是使用消息隊列的具體步驟:
1.定義一個結構體類型(第一個成員必須是long int類型),用來當作消息隊列中消息的類型; 2.使用msgget函數創建或者獲取消息隊列,代碼中的鍵使用了111這個隨機數字; 3.在准備發送的消息中添加數據(代碼中為msg_buf.data); 4.使用msgsnd函數把步驟3中的消息發送到消息隊列中; 5.使用msgrcv函數從消息隊列中獲取消息,並且顯示消息中的數據; 6.使用msgctl函數刪除消息隊列,需要使用的命令:IPC_RMID;看官們,正文中就不寫代碼了,該程序和共享內存的示例程序類似,通過在運行程序時使用不同的參數來代表不同的進程。
參數:-w表示發送消息的進程;參數:-r表示接收消息的進程;此外,在程序中只是為了演示消息隊列的用法,沒有考慮進程間的同步。因此,需要先向消息隊列中發送消息,然後才能從消息隊列中獲取消息。即:在運行程序時,先使用-w參數,然後再使用-r參數。如果不按照這個順序運行程序,就會發生死鎖。
下面是程序的運行結果,請大家參考:
./s -w //運行程序,通過參數w發送消息到消息隊列中
write data into message.count:3,data:hello message queue //顯示發送到消息隊列中消息的內容
./s -r //運行程序,通過參數r從消息隊列中讀取消息
the data of message .count:3,data:hello message queue //顯示接收到消息隊列中消息的內容
各位看官,關於使用消息隊列進行進程間通信的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。