linux程序間通訊之訊息佇列

2021-05-28 00:45:50 字數 2741 閱讀 3443

訊息佇列:

使用訊息佇列的好處:可以給訊息附加特定的訊息型別。訊息佇列用於同一臺計算機的程序間的通訊。

#include 

#include 

key_t ftok(const char *pathname, int proj_id);

該函式根據檔名生成乙個id

,系統建立ipc

通訊 (訊息佇列、訊號量和共享記憶體) 時必須指定乙個

id值。

#include 

#include 

#include 

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

該函式的作用為:建立乙個新的訊息佇列,或者獲取乙個已經存在的訊息佇列

#include 

#include 

#include 

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msg***);

該函式為向訊息佇列中傳輸乙個訊息,其中msqid

為訊息佇列id,

msgp

為自定義的訊息資料型別,

msgsz

為訊息附加資訊

size

,msg***

為訊息標誌

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,

int msg***);

msqid為訊息佇列id;

msgp

為指向訊息資料結構的指標;

msgsz

為訊息資料的長度;

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

type > 0   返回佇列中訊息型別為

t y p e

的第乙個訊息。

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

t y p e

絕對值。

msg***的值可以設定為

ipc_nowait或者0

。當設定為

ipc_nowait

時,若當前佇列沒有訊息,則

msgrcv

會立即返回;若設定為

0,當佇列沒有訊息時,會一直阻塞,直到有了指定的訊息或者訊息佇列被刪除了

send.c函式

#include

#include

#include

#include

#include

#include

struct my_msg{

long type;

char mtext[512];

int main()

struct my_msg my_msg;

int msg_id;

key_t key;

key = ftok("/usr/local", 1);

if(key == -1)

key = 1234;

msg_id = msgget(key, ipc_creat|0600);

if(msg_id == -1)

perror("error msgget\n");

return -1;

my_msg.type = 1;

memset(my_msg.mtext, 0, sizeof(my_msg.mtext));

strcpy(my_msg.mtext, "write someting about my_msg.type=1");

if(msgsnd(msg_id, (void *)&my_msg, (size_t)strlen(my_msg.mtext), ipc_nowait))

perror("error msgsnd\n");

return  -1;

system("ipcs -q");

sleep(20);

msgctl(msg_id, ipc_rmid, null);

return 0;

recv.c函式

#include

#include

#include

#include

#include

#include

struct my_msg{

long type;

char mtext[512];

int main()

struct my_msg my_msg;

int msg_id;

key_t key;

int len;

key = ftok("/usr/local", 1);

if(key == -1)

key = 1234;

msg_id = msgget(key, ipc_creat|0600);

if(msg_id == -1)

perror("msgget error\n");

return -1;

len = msgrcv(msg_id, (void *)&my_msg, sizeof(my_msg.mtext), 0, 0);

if(len ==-1)

perror("error msgrcv\n");

printf("type is %ld \nmtext is %s\n", my_msg.type, my_msg.mtext);

system("ipcs -q");

sleep(20);

system("ipcs -q");

return 0;

linux程序間通訊之訊息佇列

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

Linux程序間通訊之訊息佇列

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

程序間通訊之訊息佇列 Linux

一 什麼是訊息 訊息 message 是乙個格式化的可變長的資訊單元。訊息機制允許由乙個程序給其它任意的程序傳送乙個訊息。當乙個程序收到多個訊息時,可將它們排成乙個訊息佇列。1 訊息機制的資料結構 1 訊息首部 記錄一些與訊息有關的資訊,如訊息的型別 大小 指向訊息資料區的指標 訊息佇列的鏈結指標等...