溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

進程間通信---消息隊列

發布時間:2020-04-03 20:37:57 來源:網絡 閱讀:402 作者:下一個明天 欄目:編程語言

    什么是消息隊列?

    消息隊列提供了一種從進程向另一個進程發送一個數據塊的方法。每個數據塊都被認為是有一個類型,接收者進程的數據塊可以有不同的類型值。


    消息隊列與管道的區別:消息隊列是基于消息的,而管道是基于字節流的,且消息隊列的讀取不一定是先入先出。


    相關函數

  1. 創建新消息隊列或取得已存在消息隊列


    進程間通信---消息隊列

    進程間通信---消息隊列

  2. 返回值:成功,返回消息隊列的標識符

            失敗,返回-1

   第一個參數:消息隊列對象的關鍵字,函數將它與已有的消息隊列對象的關鍵字進行比較來判斷消息                隊列是否已經創建。由函數ftok()得來。

   第二個參數:控制函數的具體操作??梢匀∫韵聨讉€值:

   IPC_CREAT:如果消息隊列不存在則創建,否則直接打開。

   IPC_EXCL:單獨使用無意義。

   IPC_CREAR | IPC_EXCL :消息隊列時新創建的。


3. ftok函數

   函數ftok把一個已存在的路徑名和一個整數標識得轉換成一個key_t值,稱為IPC鍵。

   key_t ftok(const char* patnname,int id);

   pathname:路徑必須存在且可以訪問

   id: 低8位


4. 向隊列讀/寫消息

   

   msgsnd將數據放到消息隊列中,msgrcv從隊列中取消息

進程間通信---消息隊列


    msqid: 消息隊列的標識符

    msgp:  指向消息緩沖區的指針,此位置用來暫時存儲發送和接受的消息,是用戶定義的通用的結構。

    msgsz:消息的大小

    msgtyp:從消息隊列內讀取的消息形態。若為0,則消息隊列中的所有消息都被取完。

    msgflg: msgflg為0時,msgsnd()和msgrcv()在隊列呈滿或空的情形時,采取阻塞等待的處理模式。

            msgflg和常數連用時,msgsnd()執行時若隊列滿,msgrcv()將不會阻塞,而是返回-1,若             執行msgrcv(),則在消息隊列呈空時,等待不做返回-1.


5. 設置消息隊列的屬性

   函數原型: int msgctl(int msgqid,int cmd,struct msqid_ds *buf);

   對msgqid標識的消息隊列執行cmd操作。cmd操作分三種:IPC_STAT,IPC_SET,IPC_RMID

   IPC_STAT:該命令用來獲取消息隊列對應的msqid_ds數據結構,并將其保存到buf指定的地址空間。

   IPC_SET:該命令用來設置消息隊列的屬性,要設置的屬性存儲在buf中。

   IPC_RMID:從內核中刪除msqid標識的消息隊列。


6. 查看消息隊列    ipcs -q

   刪除消息隊列    ipcrm -q semid


“comm.h”

進程間通信---消息隊列


“comm.c”

進程間通信---消息隊列

進程間通信---消息隊列

進程間通信---消息隊列

“client.c”

進程間通信---消息隊列


“server.c”

進程間通信---消息隊列


進程間通信---消息隊列



進程間通信---消息隊列

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女