1. 程式人生 > >IPC之——消息隊列

IPC之——消息隊列

創建 wait 正整數 接收消息 數據 查看 rmi long 信息

消息隊列作用:

  可以用於兩個沒有聯系的進程間通信,創建一個消息隊列類似於打開了一個文件,兩個不同的進程都可以進行操作

消息隊列之函數介紹:

頭文件:<sys/type.h> <sys/ipc.h> <sys/msg.h>

1.msgget(key_t,int msgflg)://創建消息隊列  返回值為消息隊列ID號

  key_t:鍵值,內核通過key來生成消息隊列(如0333,055等),當設置成IPC_PRIVATE時為私有鍵,key為0,默認創建一個新的消息隊列

  msgflg:IPC_CREAT或IPC_EXCL,以及權限,如(msgid=msgget(033,IPC_CREAT|0600)

2.msgctl(int msqid,int cmd,struct msqid_ds *buf)
  cmd:IPC_STAT(查看消息隊列信息) ,IPC_RMID(刪除一個消息隊列)

  buf:是一個結構體,根據cmd而考慮加什麽參數,如果是刪除可以寫NULL,如果是獲取信息就寫一個結構體變量

3.msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflag)//發送消息,成功返回0,失敗返回-1

  msgp:可以將消息封裝成一個結構體,也可以是以一個數組,但是前八為必須是消息類型

  msgsz:消息長度指有效數據,不包括type;

  msgflag:IPC_NOWAIT,消息滿時不阻塞 ,立即返回

      0:無要求,滿時阻塞

4.msgrcv(int msgid,void *msgp,size_t msgsz,long msgtyp,int msgflg)//接收消息

  msgp:同上,可以是結構體也可以是數組

  msgsz:消息的數據長度,不包括type

  msgtyp:表示取的消息類型:

    0:表示取第一個消息

    num:表示取消息類型為num的消息(num為正整數)

    -num:如(-4),表示取type<=4(-4絕對指)消息,如果有多個成立的消息,從小到達,從        前到後取。。。作用(用於優先級別的控制)

  msgflg: 0表示無特殊操作選項

      IPC_NOWAIT:非阻塞

IPC之——消息隊列