訊息佇列:
使用訊息佇列的好處:可以給訊息附加特定的訊息型別。訊息佇列用於同一臺計算機的程序間的通訊。
#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 訊息首部 記錄一些與訊息有關的資訊,如訊息的型別 大小 指向訊息資料區的指標 訊息佇列的鏈結指標等...