該函式用於建立乙個新的訊息佇列或訪問乙個已存在的訊息佇列,返回乙個整數識別符號。
當建立乙個新的訊息佇列時,msqid_ds結構的如下成員被初始化:
* msg_perm結構的uid和cuid成員被設定成當前程序的有效使用者id,gid和cgid成員被設定成當前程序的有效id;
* oflag中的讀寫許可權位存放在msg_perm.mode中;
* msg_qnum、msg_lspid、msg_lrpid、msg_stime和msg_rtime被置位0;
* msg_ctime被設定成當前時間;
* msg_qbytes被設定成系統限制值;
int msgsnd(int msqid, const void *ptr, size_t length, int flag);
ptr是乙個結構指標,具有如下的模板
struct msgbuf{
long mtype;/* message type, must be > 0 */
char mtext[1];/* message data */
ssize_t msgrcv(int msqid, void *ptr, size_t length, long type, int flag);
type指定希望從給定的佇列中讀取什麼樣的訊息:
* type等於0,返回佇列中的第乙個訊息(也即最早的訊息);
* type大於0,返回其型別值位type的第乙個訊息;
* type小於0,返回其型別值小於或等於type的絕對值最小的訊息型別的第乙個訊息;
int msgctl(int msqid, int cmd, struct msqid_ds *buff);
msgctl提供3個命令:
ipc_rmid 從系統中刪除由msqid指定的訊息佇列,當前在該佇列上的任何訊息都被丟棄;
ipc_set 給指定的訊息佇列設定其msqid_ds結構下的4個成員:msg_perm.uid、msg_perm.gid、msg_perm.mode和msg_qbytes
ipc_stat 給呼叫者返回與所指定訊息佇列對應的當前msqid_ds結構
SystemV訊息佇列
從乙個程序傳送資料到另外乙個程序。傳送的是資料塊,這個稱為訊息,訊息有型別,有邊界。每條訊息的最大長度有限制 msgmax 位元組 root localhost cat proc sys kernel msgmax 8192 每個訊息佇列的總位元組數有上限 msgmnb 位元組 root local...
system v 訊息佇列(二)
1 功能 把一條訊息新增到訊息佇列中 2 原型 intmsgsnd int msqid,const void msgp.size t msgsz,int msg 3 引數 msgqid 由msgget函式返回的訊息佇列標識碼 msgp 是乙個指標,指標指向準備傳送的訊息 msgsz 是msgp指向的...
System V訊息佇列 3
server程序接收時,指定msgtyp為1,從隊首不斷接收訊息 server程序傳送時,將mtype指定為接收到的client程序的pid client程序傳送的時候,mtype指定為自己程序的pid client程序接收時,需要將msgtyp指定為自己程序的pid,只接收訊息型別為自己pid的訊...