程序通訊 訊息佇列 聽課筆記

2021-08-30 23:16:36 字數 1599 閱讀 7445

隨核心持續

[size=x-large]鍵值[/size]

#include

#include

key_t ftok(char *pathname, char proj)

pathname 檔名

proj 專案名, 不為0即可

返回檔名對應的鍵值

[size=x-large]開啟訊息佇列[/size]

#include

#include

#inlcude

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

key: 鍵值, 由ftok獲得-->key引數為ipc_private則建立新訊息佇列

msg***: 標誌位

ipc_create 建立新的訊息佇列

ipc_excl 與ipc_creat一同使用, 如果訊息佇列已經存在, 則返回錯誤

ipc_nowait 非阻塞

返回值: 返回與key對應的訊息佇列描述字

[size=x-large]傳送訊息[/size]

#include

#include

#inlcude

int msgsnd(int msqid, strcut msgbuf *msgp, int msgsz, int msg***)

struct msgbuf

[size=x-large]接收訊息[/size]

#include

#include

#inlcude

int msgrcv(int msqid, strcut msgbuf *msgp, int msgsz, long msgtyp, int msg***)

//從msgid代表的訊息佇列中讀取乙個msgtyp型別的訊息

//儲存在msgp指向的msgbuf結構中, 佇列中這條訊息將被刪除

[size=x-large]示例[/size]

#include

#include

#include

struct msg_buf

;int main()

msgbuf.mtype = getpid();

strcpy(msgbuf.data,"test haha");

ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),ipc_nowait);

if(ret==-1)

memset(&msgbuf,0,sizeof(msgbuf));

ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),getpid(),ipc_nowait);

if(ret==-1)

printf("recv msg =[%s]\n",msgbuf.data);

}

程序通訊(訊息佇列)

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

程序通訊 訊息佇列

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

程序通訊 管道聽課筆記

size medium 程序間通訊 ipc 作用 size 1.資料傳輸 2.共享資源 3.通知事件 4.程序控制 size medium ipc的方式 6種 size 1.管道 pipe 和有名管道 fifo 2.訊號 signal 3.訊息佇列 4.共享記憶體 5.訊號量 6.套接字 size ...