青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Jiwu Bu

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  32 隨筆 :: 0 文章 :: 25 評論 :: 0 Trackbacks
參考文章:
http://blog.chinaunix.net/u1/53810/showart_425856.html

1.創建消息隊列
int msgget(key_t key, int msgflg);

通常是msgflg =IPC_CREAT| IPC_EXCL|0666
通過key_t ftok(const char *pathname, int proj_id);創建key_t

2.隊列讀寫
ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg);

3.消息隊列控制
int msgctl(int msqid, int cmd, struct msqid_ds *buf);

進程間通訊--消息隊列服務端:
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <errno.h>
  5 #include <sys/types.h>
  6 #include <sys/ipc.h>
  7 #include <sys/msg.h>
  8 #include <sys/stat.h>
  9 #include <pthread.h>
 10 #include <iostream>
 11 
 12 using namespace std;
 13 
 14 #define MSG_FILE "/boot"
 15 #define BUFSIZE 255
 16 
 17 /* 服務端創建的消息隊列最后沒有刪除,我們要使用ipcrm命令來刪除的 */
 18 /* ipcrm -q <msqid> i ipcs -q*/
 19 
 20 typedef struct msgtype 
 21 {
 22     long mtype;
 23     char buffer[BUFSIZE+1];
 24 };
 25 
 26 void* RecvThreadProc(void* lpPara)
 27 {
 28     int msgid = (int)lpPara;
 29     msgtype msg;
 30 
 31     whiletrue )
 32     {
 33         int Ret = msgrcv(msgid, &msg, sizeof(msg.buffer), 99990);
 34 
 35         if( Ret <  0 )
 36         {
 37             fprintf(stderr, "Receive Message Error:%s\n", strerror(errno));
 38             break;
 39         }
 40 
 41         if(  strncmp(msg.buffer, "exit"4== 0 )
 42         {
 43             continue;
 44         }
 45 
 46         std::cout << msg.buffer << std::endl;
 47     }
 48 
 49     return NULL;
 50 }
 51 
 52 void* SendThreadProc(void* lpPara)
 53 
 54     int msgid = (int)lpPara;
 55     msgtype msg;
 56     char buf[BUFSIZE];
 57  
 58     whiletrue )
 59     {
 60         memset( buf, 0x00sizeof(buf) );
 61         cin.getline(buf, BUFSIZE);
 62 
 63         msg.mtype = 8888;
 64         strcpy( msg.buffer, buf);
 65 
 66         int Ret = msgsnd(msgid, &msg, sizeof(msg.buffer), 0);
 67         
 68         if( Ret != 0 )
 69         {
 70             fprintf(stderr,"Send Message Error:%s\n", strerror(errno));
 71             break;
 72         }
 73 
 74         if(  strncmp(msg.buffer, "exit"4== 0 )
 75         {
 76             break;
 77         }
 78     }
 79 
 80     return NULL;
 81 }
 82 
 83 int main(int argc, char* argv[])
 84 {
 85     key_t key;
 86     int msgid;
 87 
 88     key = ftok(MSG_FILE, 'a');
 89     if-1 == key )
 90     {
 91         fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));
 92         exit(1);
 93     }
 94 
 95     msgid = msgget(key,  S_IRUSR | S_IWUSR|IPC_CREAT | IPC_EXCL );
 96 
 97     if-1 == msgid )
 98     {
 99         fprintf(stderr, "Creat Message Error:%s\n", strerror(errno));
100         exit(1);
101     }
102     printf("msqid = %d\n", msgid);
103 
104     pthread_t pthread_recv;
105     pthread_t pthread_send;
106 
107     if ( pthread_create( &pthread_recv, NULL, RecvThreadProc, (void*)msgid) != 0 )
108     {
109         fprintf(stderr, "Creat Recveive Thread  Error:%s\n", strerror(errno));
110         exit(1);
111     }
112 
113     if ( pthread_create( &pthread_send, NULL, SendThreadProc, (void*)msgid) != 0 )
114     {
115         fprintf(stderr, "Creat Send Thread  Error:%s\n", strerror(errno));
116         exit(1);
117     }
118 
119     std::cout << "Start message queue server successful" << std::endl;
120 
121     pthread_join(pthread_send, NULL);
122     msgctl ( msgid, IPC_RMID, NULL );
123 
124     return 0;
125 }

進程間通訊--消息隊列客戶端:
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <errno.h>
  5 #include <sys/types.h>
  6 #include <sys/ipc.h>
  7 #include <sys/msg.h>
  8 #include <sys/stat.h>
  9 #include <pthread.h>
 10 #include <iostream>
 11 
 12 using namespace std;
 13 
 14 #define MSG_FILE "/boot"
 15 #define BUFSIZE 255
 16 
 17 /* 服務端創建的消息隊列最后沒有刪除,我們要使用ipcrm命令來刪除的 */
 18 /* ipcrm -q <msqid> i ipcs -q*/
 19 
 20 typedef struct msgtype 
 21 {
 22     long mtype;
 23     char buffer[BUFSIZE+1];
 24 };
 25 
 26 void* RecvThreadProc(void* lpPara)
 27 {
 28     int msgid = (int)lpPara;
 29     msgtype msg;
 30 
 31     whiletrue )
 32     {
 33         int Ret = msgrcv(msgid, &msg, sizeof(msg.buffer), 88880);
 34 
 35         if( Ret <  0 )
 36         {
 37             fprintf(stderr, "Receive Message Error %s\n", strerror(errno));
 38             break;
 39         }
 40 
 41         std::cout << msg.buffer << std::endl;
 42     }
 43 
 44     return NULL;
 45 }
 46 
 47 void* SendThreadProc(void* lpPara)
 48 
 49     int msgid = (int)lpPara;
 50     msgtype msg;
 51     char buf[BUFSIZE];
 52  
 53     whiletrue )
 54     {
 55         memset( buf, 0x00sizeof(buf) );
 56         cin.getline(buf, BUFSIZE);
 57 
 58         msg.mtype = 9999;
 59         strcpy( msg.buffer, buf);
 60 
 61         int Ret = msgsnd(msgid, &msg, sizeof(msg.buffer), 0);
 62         
 63         if( Ret != 0 )
 64         {
 65             fprintf(stderr,"Send Message Error:%s\n", strerror(errno));
 66             break;
 67         }
 68 
 69         if(  strncmp(msg.buffer, "exit"4== 0 )
 70         {
 71             break;
 72         }
 73     }
 74 
 75     return NULL;
 76 }
 77 
 78 int main(int argc, char* argv[])
 79 {
 80     key_t key;
 81     int msgid;
 82 
 83     key = ftok(MSG_FILE, 'a');
 84     if-1 == key )
 85     {
 86         fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));
 87         exit(1);
 88     }
 89 
 90     msgid = msgget(key,  S_IRUSR|S_IWUSR);
 91 
 92     if-1 == msgid )
 93     {
 94         fprintf(stderr, "Creat Message Error:%s\n", strerror(errno));
 95         exit(1);
 96     }
 97     printf("msqid = %d\n", msgid);
 98 
 99     pthread_t pthread_recv;
100     pthread_t pthread_send;
101 
102     if ( pthread_create( &pthread_recv, NULL, RecvThreadProc, (void*)msgid) != 0 )
103     {
104         fprintf(stderr, "Creat Recveive Thread  Error:%s\n", strerror(errno));
105         exit(1);
106     }
107 
108     if ( pthread_create( &pthread_send, NULL, SendThreadProc, (void*)msgid) != 0 )
109     {
110         fprintf(stderr, "Creat Send Thread  Error:%s\n", strerror(errno));
111         exit(1);
112     }
113 
114     std::cout << "Start message queue client successful" << std::endl;
115 
116     pthread_join(pthread_send, NULL);
117 
118     return 0;
119 }

消息隊列服務端啟動后,


可以通過: ipcs -q查詢 msqid



通過
g++ -o MsgClient MsgClient.cpp -lpthread
g++ -o MsgServer MsgServer.cpp -lpthread
分別編譯服務端與客戶端!

http://www.shnenglu.com/Files/bujiwu/MsgQueue.rar

posted on 2009-11-07 21:47 bujiwu 閱讀(734) 評論(0)  編輯 收藏 引用 所屬分類: Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            91久久嫩草影院一区二区| 亚洲成人在线免费| 欧美国产欧美亚州国产日韩mv天天看完整| 一区二区三欧美| 国产精品乱码妇女bbbb| 亚洲欧美日韩精品久久亚洲区| 99国产精品久久久久老师 | 欧美一级在线播放| 国产在线精品一区二区中文| 久久精品视频一| 久久久久久久综合日本| 在线播放日韩欧美| 亚洲激情电影在线| 国产精品www网站| 久久精品在这里| 免费亚洲一区二区| 中日韩男男gay无套| 亚洲欧美中文日韩v在线观看| 国语自产精品视频在线看一大j8 | 亚洲一区激情| 性欧美video另类hd性玩具| 伊人激情综合| 夜夜夜久久久| 伊人婷婷欧美激情| 亚洲日本成人在线观看| 国产精品一区毛片| 欧美国产日韩精品| 国产精品久久久久久av福利软件 | 99亚洲视频| 禁久久精品乱码| 亚洲视屏在线播放| 在线观看av一区| 亚洲午夜视频| 亚洲精品激情| 欧美亚洲综合网| 中文高清一区| 蜜桃久久精品一区二区| 欧美一二区视频| 欧美日韩国产三区| 免费在线成人av| 国产女人18毛片水18精品| 亚洲电影免费| 有码中文亚洲精品| 亚洲一区日韩| 亚洲一区图片| 欧美精品亚洲二区| 蜜臀av性久久久久蜜臀aⅴ| 国产精品成人免费| 亚洲国产视频直播| 亚洲成色www8888| 欧美一区国产在线| 午夜精品久久久久久久蜜桃app| 欧美黑人在线播放| 久久躁日日躁aaaaxxxx| 国产热re99久久6国产精品| 亚洲视频国产视频| 99日韩精品| 欧美日韩xxxxx| 亚洲精品国产欧美| 亚洲激情网站| 久久综合九色综合欧美就去吻| 欧美在线观看天堂一区二区三区| 欧美日韩一区在线观看| 亚洲精品国产精品国产自| 91久久国产自产拍夜夜嗨| 久久三级福利| 欧美大片免费久久精品三p| 亚洲成人在线观看视频| 欧美中文日韩| 蜜臀av一级做a爰片久久| 在线观看欧美视频| 久久婷婷丁香| 亚洲福利在线观看| 亚洲久久一区| 欧美少妇一区二区| 一区二区三区视频免费在线观看| 亚洲在线观看免费视频| 国产精品成人免费| 午夜影院日韩| 欧美成人精品福利| 亚洲毛片一区| 国产精品久久999| 欧美伊人久久大香线蕉综合69| 久久久精品国产免大香伊| 国产欧美在线视频| 久久久久久久久久看片| 欧美成人午夜视频| 亚洲特级毛片| 国产一区二区看久久| 久久人人爽人人爽| 亚洲久久一区| 欧美一区二区性| 亚洲国产精品va| 欧美亚洲第一页| 久久国产一区二区三区| 亚洲激情在线播放| 亚洲专区免费| 亚洲电影中文字幕| 国产精品高潮呻吟视频| 欧美在线视频一区二区三区| 欧美国产精品va在线观看| 亚洲一二三区在线| 红桃视频成人| 国产精品久久久久影院色老大| 久久精品人人| 亚洲视频网在线直播| 麻豆精品一区二区av白丝在线| 中日韩男男gay无套 | 欧美国产三级| 欧美一级大片在线免费观看| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲综合精品| 亚洲人成网在线播放| 国产精品一级| 欧美日一区二区在线观看| 久久影院亚洲| 欧美在线视频日韩| 在线视频欧美精品| 亚洲国内高清视频| 欧美~级网站不卡| 久久精品国产亚洲高清剧情介绍| 在线综合亚洲欧美在线视频| 黑人巨大精品欧美黑白配亚洲| 国产精品二区在线观看| 美女视频黄 久久| 久久久美女艺术照精彩视频福利播放 | 狠狠干成人综合网| 国产精品黄色| 欧美精品一卡二卡| 狂野欧美一区| 久久久久久久久岛国免费| 亚洲免费中文字幕| 99国产成+人+综合+亚洲欧美| 欧美高清在线视频观看不卡| 欧美在线亚洲一区| 午夜欧美精品| 亚洲欧美日韩一区二区三区在线| 日韩亚洲欧美中文三级| 亚洲国产成人久久综合一区| 精品91在线| 尤物九九久久国产精品的特点| 国产一区99| 在线日韩中文| 亚洲第一中文字幕| 精品av久久久久电影| 韩国av一区二区三区在线观看 | 欧美日韩在线一区二区三区| 欧美日韩二区三区| 欧美精品一区二区三区在线播放| 欧美丰满少妇xxxbbb| 欧美韩日一区二区三区| 欧美精品久久久久久久免费观看| 欧美不卡视频一区发布| 欧美激情亚洲一区| 欧美日韩亚洲天堂| 国产精品成人在线| 国产欧美精品在线播放| 国产日韩欧美视频| 黄色影院成人| 亚洲破处大片| 亚洲在线视频网站| 久久国产加勒比精品无码| 久久精品二区| 女同一区二区| 一级成人国产| 欧美在线观看一区二区| 久久综合网络一区二区| 欧美精品日韩三级| 国产精品伦一区| 精久久久久久久久久久| 亚洲美女在线一区| 欧美一区=区| 亚洲国产福利在线| 一二美女精品欧洲| 久久久久久久欧美精品| 欧美巨乳在线观看| 国产精品视频九色porn| 一区二区三区我不卡| 一区二区动漫| 久久亚洲春色中文字幕| 亚洲欧洲日夜超级视频| 亚洲欧美资源在线| 欧美+亚洲+精品+三区| 国产精品伦一区| 亚洲欧洲一区二区三区久久| 亚洲欧美在线x视频| 欧美成人亚洲成人| 亚洲欧美日韩国产一区二区| 欧美激情网友自拍| 国产日韩一级二级三级| 亚洲免费观看视频| 麻豆91精品| 亚洲女同精品视频| 欧美+亚洲+精品+三区| 国产小视频国产精品| 正在播放亚洲一区| 欧美激情第六页| 久久av二区| 国产精品午夜久久| 亚洲少妇中出一区|