System V訊息佇列

2021-07-10 22:01:16 字數 1900 閱讀 2056

該函式用於建立乙個新的訊息佇列或訪問乙個已存在的訊息佇列,返回乙個整數識別符號。

當建立乙個新的訊息佇列時,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的訊...