Linux程序間通訊之訊息佇列

2022-01-12 01:47:12 字數 1994 閱讀 4661

馬上過年了,心裡萬般滋味。。。

一,訊息佇列

1,概念:「訊息佇列」是在訊息的傳輸過程中儲存訊息的容器

2,訊息佇列就是乙個訊息的鍊錶。可以把訊息看作乙個記錄,具有特定的格式以及特定的優先順序。

對訊息佇列有寫許可權的程序可以向訊息佇列中按照一定的規則新增新訊息

對訊息佇列有讀許可權的程序則可以從訊息佇列中讀走訊息

訊息佇列是隨核心持續的。

3,程式設計注意事項:使用時先把資料封裝成訊息,把訊息存入佇列

程式設計步驟: 具體函式的用法可以用man手冊檢視(強力推薦)

(1)ftok()生產key

(2)使用msgget( ) 建立/獲取訊息佇列,返回值是佇列識別符號

(3)使用msgsnd( ) 傳送訊息

使用msgrcv( ) 接收訊息

(4)使用msgctl( ) 刪除訊息佇列

4,例項:

sendmsg.c   用來傳送訊息的

//

sendmsg.c

#include

#include

#include

#include

#include

#include

#include

struct

my_msg

msg1, msg2;

intmain()

msg1.mtype = 2

; strcpy(msg1.buf,

"hello, msg2");

msgsnd(msgid, &msg1, sizeof(msg1), 0); //

阻塞//

msgsnd(msgid, &msg1, sizeof(msg1), ipc_nowait);

//非阻塞

msg2.mtype = 1

; strcpy(msg2.buf,

"hello, msg1");

msgsnd(msgid, &msg2, sizeof(msg2), 0); //

阻塞printf(

"訊息傳送完成,按回車銷毀訊息佇列\n");

getchar();

if(-1 ==shmctl(msgid, ipc_rmid, null))

return0;

}

recvmsg.c  用來接收訊息的

//

recvmsg.c

#include

#include

#include

#include

#include

#include

#include

struct

my_msg

msg;

intmain()

int res = msgrcv(msgid, &msg, sizeof

(msg),

2, //

取訊息型別為2的訊息0);

printf(

"型別:%d, 內容:%s\n

", msg.mtype, msg.buf);

printf(

"訊息接收完成,按回車銷毀訊息佇列\n");

getchar();

if(-1 ==shmctl(msgid, ipc_rmid, null))

return0;

}

5,執行結果

6,獲取**  

git clone

有人看到這個麻煩再烏班圖中試試這個庫有沒有建好。主要是學習github的一些用法。

linux程序間通訊之訊息佇列

訊息佇列就是乙個訊息的鍊錶。可以把訊息看作乙個記錄,具有特定的格式以及特定的優先順序。對訊息佇列有寫許可權的程序可以向中按照一定的規則新增新訊息 對訊息佇列有讀許可權的程序則可以從訊息佇列中讀走訊息。include include include include include include in...

linux程序間通訊之訊息佇列

訊息佇列 使用訊息佇列的好處 可以給訊息附加特定的訊息型別。訊息佇列用於同一臺計算機的程序間的通訊。include include key t ftok const char pathname,int proj id 該函式根據檔名生成乙個id 系統建立ipc 通訊 訊息佇列 訊號量和共享記憶體 時...

Linux程序間通訊之訊息佇列

實現功能 編寫程式sender,它建立乙個訊息佇列 然後,迴圈等待使用者通過終端輸入一串字元,將這串字元通過訊息佇列傳送給receiver,直到使用者輸入 bye 為止 最後,它向receiver程序傳送訊息 end 並且等待receiver的應答,等到應答訊息後,將接收到的應答資訊顯示在終端螢幕上...