程序通訊 訊息佇列簡單例子

2021-09-30 09:30:15 字數 1003 閱讀 1744

常用的程序間通訊方法,訊息佇列,共享記憶體,訊號量陣列

直接看程式

#include #include #include #include int main(void)

這裡msgget函式直接產生了乙個訊息佇列,返回乙個訊息佇列號。

int msgget(key_t key, int msg***);

key_t是乙個標誌,可以由ftok生成,可參考ftok函式。也可以自己指定。

msg***包含了一些許可權,是否建立等資訊。

執行完上面程式後,用ipcs檢視,在下面應該多了一則訊息佇列的資訊,包括訊息數,大小等。

下面是乙個傳送結構體資訊的例子

#include #include #include #include #define size 16

struct student_t ;

/*struct msgbuf_t ;

*/int main(void)

msgsnd是將stu中的內容發到訊息佇列中!

下面是乙個接收的例子

#include #include #include #include #define size 16

struct student_t ;

int main(void)

return 0;

}

用函式msgrcv來接收其中的內容,

每執行一次,發現訊息佇列數減少乙個,如果沒有訊息在佇列裡面,會阻塞的等待。

引數type使我們可以指定想要哪一種訊息,

type == 0 返回訊息佇列中第乙個訊息

type > 0返回佇列中訊息型別為type的第乙個訊息

type < 0返回佇列中訊息型別值小於或等於type絕對值的訊息

程序通訊(訊息佇列)

訊息佇列與管道不同的是,訊息佇列是基於訊息的,而管道是基於位元組流的,且訊息佇列的讀取不一定是先入先出。訊息佇列與命名管道有一 樣的不足,就是每個訊息的最大長度是有上限的 msgmax 每個訊息佇列的總的位元組 數是有上限的 msgmnb 系統上訊息佇列的總數也有乙個上限 msgmni ipc物件資...

程序通訊 訊息佇列

訊息佇列的使用 建立開啟訊息佇列msgget 讀資料從佇列msgrcv 寫資料到佇列msgsnd 控制訊息佇列msgctl 目前主要有兩種型別的訊息佇列 posix訊息佇列以及系統v訊息佇列,系統v訊息佇列目前被大量使用 訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得...

Linux程序通訊 訊息佇列

1.訊息佇列 訊息佇列也稱為報文佇列,訊息佇列是隨核心持續的,只有在核心重起或顯示刪除乙個訊息佇列時,該訊息佇列才會真正刪除 系統中記錄訊息佇列的資料結構struct ipc ids msg ids位於核心中,系統中所有訊息佇列都可以在結構msg ids中找到訪問入口 訊息佇列其實就是乙個訊息的鍊錶...