Linux關於程序間通訊訊息佇列
訊息佇列概念
訊息佇列提供了一個從一個程序向另外一個程序傳送一塊資料的方法 每個資料塊都被認為是有一個型別,接收者程序接收的資料塊可以有不同的型別值 訊息佇列也有管道一樣的不足,就是每個資料塊的最大長度是有上限的,系統上全體佇列的最大總長度也有一個上限
訊息佇列函式操作
建立一個訊息佇列,最後進行刪除佇列
#include<stdio.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h>
int main(int argc,char *argv) { int msgid = msgget((key_t)1234,0); if(msgid == -1) { msgid = msgget((key_t)1234,IPC_CREAT|0766); } printf("msgid = %d\n",msgid); msgctl(msgid,IPC_RMID,NULL); return 0; }
訊息佇列的寫和讀
#include<stdio.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h>
typedef struct data { long i_type; char buf[1024];
}data_t;
int main(int argc,char *argv) { int msgid = msgget((key_t)1234,0); if(msgid == -1) { msgid = msgget((key_t)1234,IPC_CREAT|0766); } printf("msgid = %d\n",msgid); //傳送訊息佇列 data_t data; memset(&data,0,sizeof(data_t)); data.i_type = 1; strcpy(data.buf,"helloworld"); int ret = msgsnd(msgid,(void *)&data,sizeof(data_t)-sizeof(long),0); if(ret == 0) { printf("send succes\n"); } //讀取訊息佇列 data_t rdata; memset(&rdata,0,sizeof(data_t)); int rsize = msgrcv(msgid,(void *)&rdata,sizeof(data_t)-sizeof(long),1,0); printf("read datasize = %d, data = %s\n",rsize,rdata.buf); msgctl(msgid,IPC_RMID,NULL); return 0; }
執行結果如下: