(1)功能:把一條訊息新增到訊息佇列中
(2)原型:intmsgsnd(int msqid, const void* msgp. size_t msgsz, int msg***);
(3)引數:msgqid:由msgget函式返回的訊息佇列標識碼
msgp:是乙個指標,指標指向準備傳送的訊息
msgsz:是msgp指向的訊息長度,這個長度不含儲存訊息型別的那個long int長整型
msg***:控制著當前訊息佇列滿或到達系統上限時將要發生的事情
(4)返回值:成功返回0,;失敗返回-1
(5)msg***=ipc_nowait表示佇列滿不等待,返回eagain錯誤
(6)訊息結構在兩方面收到制約。首先它必須小於系統規定的上限值;其次,它必須以乙個long int長整數開始,接收者函式將利用這個長整數確定訊息的型別
struct msgbuf while(0)
struct msg ;
int main(int argc, char* argv)
int len = atoi(argv[1]);
int type = atoi(argv[2]);
int msgid;
msgid = msgget(1234, 0); //按照原來創造的許可權開啟
if(msgid == -1)
err_exit("msgget");
struct msg* ptr;
ptr = (struct msg*)malloc(sizeof(long)+len);
ptr->mtype = type;
if(msgsnd(msgid, ptr, len, 0) <0)
err_exit("msgsnd");
return 0;
}msg_recv.cpp
./recv -n -t 2
#include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
struct msg ;
#define msgmax 8192
int main(int argc, char* argv)
} int msgid;
msgid = msgget(1234, 0); //按照原來創造的許可權開啟
if(msgid == -1)
err_exit("msgget");
struct msg* ptr;
ptr = (struct msg*)malloc(sizeof(long)+msgmax);
ptr->mtype = type;
int n = 0;
if((n=msgrcv(msgid, ptr, msgmax, type, flag)) < 0)
err_exit("msgsnd");
printf("read %d bytes type=%ld\n", n, ptr->mtype);
return 0;
}
System V訊息佇列
該函式用於建立乙個新的訊息佇列或訪問乙個已存在的訊息佇列,返回乙個整數識別符號。當建立乙個新的訊息佇列時,msqid ds結構的如下成員被初始化 msg perm結構的uid和cuid成員被設定成當前程序的有效使用者id,gid和cgid成員被設定成當前程序的有效id oflag中的讀寫許可權位存放...
SystemV訊息佇列
從乙個程序傳送資料到另外乙個程序。傳送的是資料塊,這個稱為訊息,訊息有型別,有邊界。每條訊息的最大長度有限制 msgmax 位元組 root localhost cat proc sys kernel msgmax 8192 每個訊息佇列的總位元組數有上限 msgmnb 位元組 root local...
System V訊息佇列 3
server程序接收時,指定msgtyp為1,從隊首不斷接收訊息 server程序傳送時,將mtype指定為接收到的client程序的pid client程序傳送的時候,mtype指定為自己程序的pid client程序接收時,需要將msgtyp指定為自己程序的pid,只接收訊息型別為自己pid的訊...