<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一江春水向東流

    做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks

    函數原型

    #include <sys/msg/h>
    int msgget (key_t key, int flag)
    int msgctl (int msgid, int cmd , sruct msgid_ds *buf);
    int msgsnd (int msgid, const void *ptr, size_t nbyes, long type, int flag);
    int msgrcv (int msgid, void *ptr, size_t nbytes, long type, int flag);

    文件msg為空文件,可以為任何內容,這里只是為了ftok函數使用。程序通過建立消息隊列,完成進程間通信,注意msgrcv的第四個參數為消息類型,他定義了從隊列中取消息的類型。


    下面是msgLucy.c,是建立消息隊列的

    #include<sys/ipc.h>
    #include<sys/msg.h>
    #include<sys/stat.h>
    #include<sys/types.h>

    #include<stdio.h>
    #include<fcntl.h>
    #include<signal.h>
    #include<stdlib.h>
    #include<string.h>

    #define PROJID 0xFF
    #define LUCY 1
    #define PETER 2

    int mqid;

    void terminate_handler(int signo)
    {
    ?msgctl(mqid,IPC_RMID,NULL);
    ?exit(0);
    }

    int main()
    {
    ?char filenm[] = "msg";
    ?key_t mqkey;
    ?struct msgbuf
    ?{
    ???? ?long mtype;???? ?/* message type, must be > 0 */
    ?? ?char mtext[256];? /* message data */
    ?? }msg;
    ?int ret;

    ?mqkey = ftok(filenm,PROJID);
    ?if(mqkey == -1)
    ?{
    ??perror("ftok error: ");
    ??exit(-1);
    ?}

    ?mqid = msgget(mqkey,IPC_CREAT | IPC_EXCL | 0666);
    ?if(mqid == -1)
    ?{
    ??perror("msgget error: ");
    ??exit(-1);
    ?}

    ?signal(SIGINT, terminate_handler);
    ?signal(SIGTERM, terminate_handler);

    ?while(1)
    ?{
    ??printf("Lucy: ");
    ??fgets(msg.mtext, 256, stdin);
    ??if (strncmp("quit", msg.mtext, 4) == 0)
    ??{
    ???msgctl(mqid,IPC_RMID,NULL);
    ???exit(0);
    ??}
    ??msg.mtext[strlen(msg.mtext)-1] = '\0';
    ??msg.mtype = LUCY;
    ??msgsnd(mqid,&msg,strlen(msg.mtext) + 1,0);
    ??msgrcv(mqid,&msg,256,PETER,0);
    ??printf("Peter: %s\n", msg.mtext);??
    ?}??
    }

    下面的是msgPeter,是和Lucy通信的,程序先運行Lucy,再運行Peter

    #include<sys/ipc.h>
    #include<sys/msg.h>
    #include<sys/stat.h>
    #include<sys/types.h>

    #include<stdio.h>
    #include<fcntl.h>
    #include<signal.h>
    #include<string.h>
    #include<stdlib.h>

    #define PROJID 0xFF
    #define LUCY 1
    #define PETER 2

    int main()
    {
    ?char filenm[] = "msg";
    ?int mqid;
    ?key_t mqkey;
    ?struct msgbuf
    ?{
    ??????? ?long mtype;???? ?/* message type, must be > 0 */
    ???????? char mtext[256];? /* message data */
    ?? }msg;
    ?int ret;

    ?mqkey = ftok(filenm, PROJID);
    ?if(mqkey == -1)
    ?{
    ??perror("ftok error: ");
    ??exit(-1);
    ?}

    ?mqid = msgget(mqkey, 0);
    ?if(mqid == -1)
    ?{
    ??perror("msgget error: ");
    ??exit(-1);
    ?}

    ?while(1)
    ?{
    ??msgrcv(mqid,&msg,256,LUCY,0);
    ??printf("Lucy: %s\n",msg.mtext);
    ??printf("Peter: ");
    ??fgets(msg.mtext,256,stdin);
    ??if(strncmp("quit", msg.mtext, 4) == 0)
    ??{
    ???exit(0);
    ??}
    ??msg.mtext[strlen(msg.mtext)-1] = '\0';
    ??msg.mtype = PETER;
    ??msgsnd(mqid,&msg,strlen(msg.mtext) + 1,0);
    ?}?
    }

    posted on 2008-04-04 23:39 allic 閱讀(1352) 評論(0)  編輯  收藏 所屬分類: linux/UNIX 應用開發
    主站蜘蛛池模板: 亚洲日韩在线视频| 国产AV无码专区亚洲AV男同| 亚洲免费福利在线视频| 88av免费观看入口在线| 99ri精品国产亚洲| 16女性下面扒开无遮挡免费| 久久夜色精品国产噜噜亚洲AV| 久久久久久AV无码免费网站| 噜噜噜亚洲色成人网站∨| 1000部拍拍拍18勿入免费凤凰福利| 久久久无码精品亚洲日韩按摩| 亚洲精品视频免费在线观看| 亚洲情A成黄在线观看动漫软件| 免费观看a级毛片| 免费人人潮人人爽一区二区| 亚洲国产成人精品女人久久久 | 亚洲精品和日本精品| 一级一级一级毛片免费毛片| 亚洲女久久久噜噜噜熟女| 日韩免费无码一区二区三区| 亚洲a视频在线观看| 国产极品美女高潮抽搐免费网站| 免费无码婬片aaa直播表情| 亚洲成AV人片在线观看无码| 免费在线观看视频网站| 成人亚洲国产精品久久| 国产性爱在线观看亚洲黄色一级片| 国内精品免费在线观看 | 久久亚洲精品成人无码网站| 日韩毛片免费无码无毒视频观看| 麻豆安全免费网址入口| 亚洲日韩区在线电影| 免费毛片在线播放| 中文字幕a∨在线乱码免费看 | 亚洲GV天堂GV无码男同| 综合亚洲伊人午夜网| 丁香花免费完整高清观看| 深夜A级毛片视频免费| 亚洲毛片基地日韩毛片基地| 亚洲成AⅤ人影院在线观看| 久久久久久一品道精品免费看|