新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 進程間通信之:消息隊列

        進程間通信之:消息隊列

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257123.htm

        表8.26列舉了msgctl()函數的語法要點。

        表8.26 msgctl()函數語法要點

        所需頭文件

        #includesys/types.h>

        #includesys/ipc.h>

        #includesys/shm.h>

        函數原型

        intmsgctl(intmsgqid,intcmd,structmsqid_ds*buf)

        函數傳入值

        msqid:的隊列ID

        cmd:

        命令參數

        IPC_STAT:讀取的數據結構msqid_ds,并將其存儲在buf指定的地址中

        IPC_SET:設置的數據結構msqid_ds中的ipc_perm域(IPC操作權限描述結構)值。這個值取自buf參數

        IPC_RMID:從系統內核中刪除消息隊列

        buf:描述消息隊列的msgqid_ds結構類型變量

        函數返回值

        成功:0

        出錯:-1

        3.使用實例

        這個實例體現了如何使用消息隊列進行兩個進程(發送端和接收端)之間的通信,包括消息隊列的創建、消息發送與讀取、消息隊列的撤消和刪除等多種操作。

        消息發送端進程和消息接收端進程之間不需要額外實現進程之間的同步。在該實例中,發送端發送的消息類型設置為該進程的進程號(可以取其他值),因此接收端根據消息類型確定消息發送者的進程號。注意這里使用了函數fotk(),它可以根據不同的路徑和關鍵字產生標準的key。以下是消息隊列發送端的代碼:

        /*msgsnd.c*/

        #includesys/types.h>

        #includesys/ipc.h>

        #includesys/msg.h>

        #includestdio.h>

        #includestdlib.h>

        #includeunistd.h>

        #includestring.h>

        #defineBUFFER_SIZE512

        structmessage

        {

        longmsg_type;

        charmsg_text[BUFFER_SIZE];

        };

        intmain()

        {

        intqid;

        key_tkey;

        structmessagemsg;

        /*根據不同的路徑和關鍵字產生標準的key*/

        if((key=ftok(.,'a'))==-1)

        {

        perror(ftok);

        exit(1);

        }

        /*創建消息隊列*/

        if((qid=(key,IPC_CREAT|0666))==-1)

        {

        perror();

        exit(1);

        }

        printf(Openqueue%dn,qid);

        while(1)

        {

        printf(Entersomemessagetothequeue:);

        if((fgets(msg.msg_text,BUFFER_SIZE,stdin))==NULL)

        {

        puts(nomessage);

        exit(1);

        }

        msg.msg_type=getpid();

        /*添加消息到消息隊列*/

        if((msgsnd(qid,msg,strlen(msg.msg_text),0))0)

        {

        perror(messageposted);

        exit(1);

        }

        if(strncmp(msg.msg_text,quit,4)==0)

        {

        break;

        }

        }

        exit(0);

        }

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 八宿县| 长治市| 南昌市| 文登市| 胶州市| 齐河县| 新绛县| 大方县| 新余市| 漳州市| 仁怀市| 通州区| 海盐县| 高青县| 泰宁县| 寿光市| 城口县| 洞口县| 游戏| 清原| 新郑市| 小金县| 武清区| 苏尼特左旗| 石渠县| 自贡市| 辽源市| 陵水| 麟游县| 屯昌县| 余干县| 壤塘县| 高尔夫| 道孚县| 高碑店市| 潮安县| 天津市| 治县。| 昂仁县| 伊金霍洛旗| 资中县|