隊(duì)列最大容量字節(jié)數(shù) 16384
隊(duì)列最大隊(duì)列容量數(shù) 16

key_t ftok(char* path,int id)使用說明:

ftok創(chuàng)建一個(gè)鍵,是內(nèi)核中的隊(duì)列在外部的ID號(hào),由于消息隊(duì)列處于內(nèi)核中,只有創(chuàng)建者和內(nèi)核知道隊(duì)列在內(nèi)核里面的ID號(hào),這樣其它的進(jìn)程就無法知道內(nèi)核里面隊(duì)列ID號(hào),所以要關(guān)聯(lián)一個(gè)外部鍵進(jìn)行關(guān)聯(lián)
id (1-255)
返回內(nèi)核消息隊(duì)列的ID號(hào)

其它的注意就查看一下unix高級(jí)環(huán)境編程吧,或者有些問題需要討論就回我吧!!


 server.c

#include "msg.h" #include <stdio.h> #include <string.h> #include <stdlib.h>  int main(int argc, char** argv) {       int queid = open_msg("/root",100);              while(1)       {             fputs("請(qǐng)輸入要發(fā)送的類型:1 or 2\\\\n", stdout);             int type;             scanf("%d",&type);                          switch(type)             {                   case MYTYPE_ONE:                        {                               msg_send(queid,"MYTYPE_ONE", MYTYPE_ONE);                               break;                        }                   case MYTYPE_TWO:                        {                               msg_send(queid,"MYTYPE_TWO", MYTYPE_TWO);                               break;                        }                   default:                         {                               fputs("輸入類型錯(cuò)誤,請(qǐng)重新輸入\\\\n",stdout);                               break;                         }                                            }                          fputs("輸入:q 為退出,其它表示繼續(xù)\\\\n",stdout);             if(getchar() == \\\'q\\\')             {                   fputs("退出成功!\\\\n",stdout);                   break;             }             else             {                   fputs("繼續(xù)發(fā)送消息\\\\n",stdout);             }            } //不發(fā)送退出需要獎(jiǎng)隊(duì)列移除             del_que(queid);              return 0; } 


client.c

#include "msg.h" #include <stdio.h> #include <string.h> #include <stdlib.h>  int main(int argc, char** argv) {       int queid = open_msg("/root",100);              while(1)       {             fputs("請(qǐng)接收要發(fā)送的類型:1 or 2\\\\n", stdout);             int type;             scanf("%d",&type);                          switch(type)             {                   case MYTYPE_ONE:                        {                               msg_rec(queid,MYTYPE_ONE);                               break;                        }                   case MYTYPE_TWO:                        {                               msg_rec(queid,MYTYPE_TWO);                               break;                        }                   default:                         {                               fputs("輸入類型錯(cuò)誤,請(qǐng)重新輸入\\\\n",stdout);                               break;                         }                                            }                          fputs("輸入:q 為退出,其它表示繼續(xù)\\\\n",stdout);             if(getchar() == \\\'q\\\')             {                   fputs("退出成功!\\\\n",stdout);                   break;             }             else             {                   fputs("繼續(xù)發(fā)送消息\\\\n",stdout);             }            } //隊(duì)列移除             del_que(queid);              return 0; } 


msg.c

#include <sys/types.h> #include <sys/ipc.h> #include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/msg.h> #include<string.h> #include"msg.h"   //如果存在隊(duì)列則打開,沒有則創(chuàng)建 int open_msg(char* path, int id) {       //獲取IPC對(duì)象的一個(gè)鍵       key_t key = ftok(path, id);       if(-1 == key)       {             perror("ftok\\\\n");             exit(1);       }       //創(chuàng)建一個(gè)隊(duì)列       int queid = msgget(key, IPC_CREAT|0666);       if(-1 == queid)       {             perror("msgget\\\\n");             exit(1);       }        return queid; }  //發(fā)送消息到隊(duì)列 void msg_send(key_t key,char* text, long msgtype) {       //初始化內(nèi)容       struct MSG tmp;       memset(&tmp,sizeof(struct MSG),0);       tmp.mytype = msgtype;       strcpy(tmp.mytext,text);        //發(fā)送消息       if(msgsnd(key, &tmp, TEXTSIZE, 0))       {             perror("msgsnd\\\\n");             exit(1);       } }  //從消息隊(duì)列獲取消息并顯示 void msg_rec(key_t key,long msgtype) {       struct MSG tmp;       if(-1 == msgrcv(key, &tmp, TEXTSIZE, msgtype, MSG_NOERROR))       {             perror("msgrcv\\\\n");             exit(1);       }       printf("receive content: %s\\\\n",tmp.mytext); }  //刪除隊(duì)列,即使隊(duì)列里面還有消息也一起刪除 void del_que(key_t key) {       if(msgctl(key,IPC_RMID,NULL))       {             perror("msgsnd\\\\n");             exit(1);             } } 


msg.h

#ifndef MSG_H #define MSG_H  #include <sys/types.h>  #define TEXTSIZE 100 #define ARRYSIZE 2 #define MYTYPE_ONE 1 #define MYTYPE_TWO 2  struct MSG {       long mytype;       char mytext[TEXTSIZE]; };  int open_msg(char*,int); void msg_send(key_t,char*,long);   #endif // end MSG_H 

 

附件:http://down.51cto.com/data/2362206

更多關(guān)于云服務(wù)器域名注冊(cè),虛擬主機(jī)的問題,請(qǐng)?jiān)L問三五互聯(lián)官網(wǎng):m.shinetop.cn

贊(0)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。郵箱:3140448839@qq.com。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明出處:三五互聯(lián)知識(shí)庫 » unix XSI IPC-消息隊(duì)列例程

登錄

找回密碼

注冊(cè)

主站蜘蛛池模板: 在线精品视频一区二区| 91精品国产一二三产区| 亚洲中国精品精华液| 无码熟妇人妻av影音先锋 | 国产高清色高清在线观看| 无码熟妇人妻av影音先锋| 69天堂人成无码免费视频 | 日本一道本高清一区二区| 国产成人精品一区二区秒拍1o| 大地资源免费视频观看| 午夜国产精品福利一二| 欧美交a欧美精品喷水| 久久久久久亚洲精品成人| 久久久久综合中文字幕| 国产极品精品自在线不卡| 六月丁香婷婷色狠狠久久| 麻豆精产国品一二三区区| 精品偷拍被偷拍在线观看| 亚洲人成网站999久久久综合| 日本久久一区二区免高清| 免费国产一区二区不卡| 亚洲成熟女人av在线观看| 亚洲深深色噜噜狠狠网站| 久久九九日本韩国精品| 日韩精品国产另类专区| 国产精品久久国产丁香花| 亚洲深夜精品在线观看| 国产精品有码在线观看| 红河县| 九九热99精品视频在线| 成人啪精品视频网站午夜 | 国产综合一区二区三区麻豆| 永胜县| 一区二区三区国产偷拍| 中文字幕人妻日韩精品| 国产精品中文第一字幕| 狠狠色婷婷久久综合频道日韩 | 日韩中文字幕亚洲精品| 精品 无码 国产观看| 久久精品夜夜夜夜夜久久| 色欲av蜜桃一区二区三|