Linux程序間通訊之訊息佇列

2021-07-09 04:48:48 字數 1594 閱讀 1159

實現功能:

編寫程式sender,它建立乙個訊息佇列;然後,迴圈等待使用者通過終端輸入一串字元,將這串字元通過訊息佇列傳送給receiver,直到使用者輸入「bye」為止;最後,它向receiver程序傳送訊息「end」,並且等待receiver的應答,等到應答訊息後,將接收到的應答資訊顯示在終端螢幕上,刪除訊息佇列,結束程式的執行。編寫receiver程式,它通過訊息佇列接收來自sender的訊息,將訊息顯示在終端螢幕上,直至收到內容為「end」的訊息為止,此時,它向sender傳送乙個應答訊息「over」,結束程式的執行。

sender的**如下:

#include #include #include #include #include #include #include #include #define msg_file "sender.c"

#define buffer 255

#define perm s_irusr|s_iwusr

struct msgbuf

;char message[buffer];

int main()

//建立訊息佇列

if((msgid=msgget(key,perm|ipc_creat))==-1)

msg.mtype=1;

//迴圈接受使用者輸入

while(1)

else

msgsnd(msgid,&msg,sizeof(struct msgbuf),0);

}// memset(&msg,'\0',sizeof(struct msgbuf));

//接收msg.mtype=2的訊息,就是從receiver發來的訊息

msgrcv(msgid,&msg,sizeof(struct msgbuf),2,0);

printf("sender receive: %s\n",msg.mtext);

//刪除訊息佇列

if(msgctl(msgid, ipc_rmid, 0) == -1)

exit(exit_success);

}

receiver的**如下:

#include #include #include #include #include #include #include #include #include #define msg_file "sender.c"

#define buffer 255

#define perm s_irusr|s_iwusr

struct msgbuf

;int main()

if((msgid=msgget(key,perm|ipc_creat))==-1)

//等待接收來自sender的訊息,當接受到end時推出,接下去傳送over給sender

while(1) }

//傳送over給sender

msg.mtype=2;

strncpy(msg.mtext,myask,buffer);

msgsnd(msgid,&msg,sizeof(struct msgbuf),0);

exit(exit_success);

}

linux程序間通訊之訊息佇列

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

linux程序間通訊之訊息佇列

訊息佇列 使用訊息佇列的好處 可以給訊息附加特定的訊息型別。訊息佇列用於同一臺計算機的程序間的通訊。include include key t ftok const char pathname,int proj id 該函式根據檔名生成乙個id 系統建立ipc 通訊 訊息佇列 訊號量和共享記憶體 時...

程序間通訊之訊息佇列 Linux

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