system v 訊息佇列(二)

2021-08-03 07:49:44 字數 1564 閱讀 9497

(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的訊...