程序間通訊之訊息佇列

2021-06-22 13:52:01 字數 1289 閱讀 3811

#include

#include

#define max_msg_buf_len    512

int ikey = 6004;

struct ipcmsgbuf

;int main( void )

}/* 寫訊息佇列 */

memset( &msgdata, 0, sizeof( struct ipcmsgbuf ) );

msgdata.mtype = 1;

memcpy( msgdata.mtext, "abcdefg", 7 );

msgsnd( qid, &msgdata, 7, 0 );

/* 寫訊息佇列 */

memset( &msgdata, 0, sizeof( struct ipcmsgbuf ) );

msgdata.mtype = 2;

memcpy( msgdata.mtext, "1234567", 7 );

msgsnd( qid, &msgdata, 7, 0 );

/* 讀訊息佇列 */

memset( &msgdata, 0, sizeof( struct ipcmsgbuf ) );

msgrcv( qid, &msgdata, 7, 1, 0 );

memcpy( stmp, msgdata.mtext, 7 );

printf( "stmp=%s\n", stmp );

/* 讀訊息佇列 */

memset( &msgdata, 0, sizeof( struct ipcmsgbuf ) );

msgrcv( qid, &msgdata, 7, 2, 0 );

memcpy( stmp2, msgdata.mtext, 7 );

printf( "stmp2=%s\n", stmp2 );

/* 讀訊息佇列 */

memset( &msgdata, 0, sizeof( struct ipcmsgbuf ) );

msgrcv( qid, &msgdata, 7, 2, ipc_nowait );

memcpy( st***, msgdata.mtext, 7 );

printf( "st***=%s\n", st*** );

/* 從系統中刪除該訊息佇列以及仍在該佇列上的所有資料 */

msgctl( qid, ipc_rmid, 0 );

return 0;

}執行結果:

0000

stmp=abcdefg

stmp2=1234567

st***=

程序間通訊之訊息佇列

訊息佇列其實就是提供了一種從乙個程序向另乙個程序傳送乙個資料塊的方法。我們可以通過傳送訊息來避免命名管道的同步和阻塞問題。此外,訊息佇列和管道不同的是,訊息佇列是基於訊息的,而管道是基於位元組流的,且訊息佇列不一定是先入先出。訊息佇列與命名管道有一樣的不足,就是每個訊息的最大長度是有上限的 msgm...

程序間通訊之訊息佇列

訊息佇列 訊息佇列本質上是提供了一種從乙個程序向另乙個程序傳送資料快的方法。每個資料快都被認為是有乙個型別,接受者程序接收的資料塊可以有不同的型別值。訊息佇列和管道的區別 1 訊息佇列是基於訊息的,而管道是基於位元組流的,且訊息佇列的讀取不一定是先進先出的。2 訊息佇列的生命週期是隨核心的 不隨程序...

程序間通訊之訊息佇列

一訊息佇列 1,訊息佇列就是乙個訊息的鍊錶,把訊息看做乙個記錄,具有特定格式。程序可以向其中按照一定的規則新增新訊息 另一些程序則可以從訊息佇列中讀走訊息。2,分類 posi訊息佇列,系統v訊息佇列 大量使用 3,鍵值 訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙...