亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ 中消息隊列函數實例詳解

2020-01-26 14:05:25
字體:
來源:轉載
供稿:網友

C++ 中消息隊列函數實例詳解

1.消息隊列結構體的定義

typedef struct{    uid_t  uid;  /* owner`s user id */    gid_t  gid;  /* owner`s group id */    udi_t  cuid;  /* creator`s user id */    gid_t  cgid;  /* creator`s group id */    mode_t mode;  /* read-write permissions 0400 MSG_R 0200 MSG_W*/    ulong_t seq;  /* slot usage sequence number*/}ipc_perm;typedef stuct{    struct ipc_perm msg_perm;   /* read_write perms */    struct msg   *msg_first;   /* ptr to first message on queue */    struct msg   *msg_last;   /* ptr to last message on queue */    msglen_t     msg_cbytes;   /* used bytes current on queue */    msgqnum_t    msg_qnum;    /* current num of message on queue */    msglen_t    msg_qbytes;   /* max # of bytes allowed on queue */    pid_t        msg_lspid;   /* pid of last msgsnd() */    pid_t        msg_lrpid;   /* pid of last msgrcv() */    time_t       msg_stime;   /* time of last msgsnd() */    time_t       msg_rtime;   /* time of last msgrcv() */    time_t       msg_ctime;   /* time of last msgctl() */}msqid_ds;typedef struct{    long mtype;    char mbuf[MSGLEN];}Message;

2.創建消息隊列:

   /***************************************************Function:    int msgget(ket_t key,int oflag);Explain:    create or view a message queueReturn :    a int indetifyInclude:    sys/msg.hintroduction:    oflag: 0400 msg_r         0200 msg_w        0600 msg_wr    ipc_creat: NO exist and then creat a queue          exist : reference a queue    ipc_creat|ipc_excl: NO exist and then creat a queue              exist : return error****************************************************/#include<stdio.h>#include<sys/msg.h>#include<stdlib.h>int MsgGet(int key){    int ret;    ret=msgget(key,0600|IPC_CREAT);//   ret=msgget(key,0600|IPC_CREAT|IPC_EXCL);    if(ret<0)        perror("creat msgid error");    printf("msgid=%d/n",ret);    system("ipcs -q -i ret");    return ret;}int main(int argc,char *agrv[]){    int key;    printf("pleasse input msgkey:");    scanf("%d",&key);    MsgGet(key);    return 0;}

3.向消息隊列中發送消息msgsnd

/***********************************************************************************Function:    int msgsnd(int msqid,const void *ptr,size_t length,int flag)Explain:    send a message to a queueReturn:    len: send message len;Include:    sys/msg.hIntroduction:    flag: 0 : if queue full wait:1>具備存放新消息的空間                   2>由msqid標識的消息隊列從系統中刪除(返回EIDRM錯誤)                   3>調用線程被某個捕獲的信號所中斷(返回EINTR錯誤)       IPC_NOWAIT:如果沒有存放新消息的空間,函數馬上返回                   1>指定的隊列中有太多的字節                   2>在系統范圍存在太多的消息*****************************************************************************************/#include "typemsg.h"int MsgSnd(int msqid,char *buf,int len,int flag){    int ret;    ret=msgsnd(msqid,buf,len,flag);    if(ret<0)        perror("msgsnd error");    system("ipcs -q");    return ret;}int main(){    int msqid,len,stype;    Message msgb;    memset(&msgb,0,sizeof(Message));    printf("msgsnd:please input msqid:");    scanf("%d",&msqid);    printf("please input msgtype:");    scanf("%d",&stype);    msgb.mtype=stype;    strcpy(msgb.mbuf,"zhangweia");    MsgSnd(msqid,(char *)&msgb,sizeof(Message),0);    return 0;}

4.從隊列中獲取消息 msgrcv

/*********************************************************************Function:    int msgrcv(int msqid,const void *ptr,size_t msglen,long type,int flag)Explain:    recv message order by type     msgrcv error: Argument list too long --> msglen的長度小于消息體中消息的長度Para :    ptr: point to message struct     msglen: 由ptr指向的緩沖區中數據部分的大小,這個是該函數能夠返回的最大數據量    type: message type;              1> 0:返回隊列中最早的消息              2> 大于0:返回消息隊列中類型為type的第一個消息              3> 小于0:返回消息隊列中類型小于或者等于type的絕對值的消息類型中最小的第一個消息    flag: 0<wait> 沒有消息或者消息類型不符合的時候,線程等待         響應: 1>有一個所請求類型的消息可以獲取            2>msqid的消息隊列被系統刪除,返回一個EIDRM            3>調用線程被某個捕獲的信號所中斷       IPC_NOWAIT:在沒有數據的情況下,立即返回一個ENOMSG錯誤       MSGNOERROR:當所接受的消息數據部分大于msglen長度時,獲取截短的數據部分,否則返回E2BIG錯誤Return:    message len*********************************************************************/#include "typemsg.h"int MsgRcv(int msqid,char *buf,int msglen,long type,int flag){    int ret;    ret=msgrcv(msqid,buf,msglen,type,flag);    if(ret<0)    perror("msgrcv error");    system("ipcs -q");    return ret;}int main(){    int msqid,len;    long ttype;    Message mbuf;    printf("msgrcv:please input recv msqid:");    scanf("%d",&msqid);    MsgRcv(msqid,(char *)&mbuf,8900,0,IPC_NOWAIT);    printf("recv message=%s/n",mbuf.mbuf);    Put_String((unsigned char *)&mbuf,sizeof(Message));    return 0;}

6.消息隊列的控制msgctl

/**********************************************************Function:    int msgctl(int msqid,int cmd,struct msqid_ds *buff)Explain:    cdm: IPC_RMID; delete msqid        IPC_SET:        IPC_STAT: return msqid stat*********************************************************/#include "typemsg.h"int MsgCtl(int msqid,int cmd,struct msqid_ds *buff){    int ret;    ret=msgctl(msqid,cmd,buff);    if(ret<0)    {        perror("msgctl error");        return -1;    }    return 0;}int main(){    int msqid,type;    struct msqid_ds info;    printf("please input msqid /nand type(1:icp_rmid;2:ipc_stat)");    scanf("%d%d",&msqid,&type);    if(type==1)    {        MsgCtl(msqid,IPC_RMID,NULL);        printf("delete queue success:%d/n",msqid);    }else if(type==2)    {        MsgCtl(msqid,IPC_STAT,&info);        printf("get queue stat:%d/n",msqid);    }    return 0;}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久久精品| 久久夜色撩人精品| 亚洲新声在线观看| 欧美性xxxxx极品娇小| 亚洲成人网久久久| 精品久久久久久中文字幕一区奶水| 成人在线中文字幕| 日韩女优人人人人射在线视频| 欧美极度另类性三渗透| 色吧影院999| 永久免费精品影视网站| 国产精品久久久久久亚洲调教| 91精品视频在线免费观看| 国产亚洲美女久久| 精品国产一区久久久| 欧美精品videos性欧美| 久久久久国产一区二区三区| 美女性感视频久久久| 青青久久av北条麻妃海外网| 色老头一区二区三区| 久久色免费在线视频| 成人免费看吃奶视频网站| 亚洲综合最新在线| 日韩精品亚洲精品| 欧美亚州一区二区三区| 国产欧亚日韩视频| 精品露脸国产偷人在视频| 国产精品国产自产拍高清av水多| 日韩在线视频国产| 精品久久久91| 97国产在线视频| 亚洲国产成人精品电影| 欧美黄色三级网站| 国产精品欧美久久久| 亚洲情综合五月天| 日韩成人av网| 国产成人精品一区二区| 在线电影中文日韩| 欧美极品少妇xxxxⅹ免费视频| 久久999免费视频| 91精品国产九九九久久久亚洲| 欧美又大粗又爽又黄大片视频| 一个色综合导航| 最近2019中文字幕大全第二页| 欧美视频在线观看免费| 欧美自拍视频在线观看| 一区二区三区亚洲| 91高清免费在线观看| 日韩精品中文字幕有码专区| 亚洲欧美日韩一区二区在线| 91亚洲精品一区| 国产精品久久久久久av福利软件| 538国产精品视频一区二区| 亚洲加勒比久久88色综合| 日韩av免费在线播放| 久久影院在线观看| 欧美另类xxx| 国语自产精品视频在免费| 国产精品中文字幕在线观看| 国产精品第10页| 亚洲国产成人精品电影| 国产精品久久久久久av下载红粉| 亚洲国产精品小视频| 精品自拍视频在线观看| 国内揄拍国内精品| 精品国产精品三级精品av网址| 国产91ⅴ在线精品免费观看| 欧美性xxxx极品hd满灌| 欧美肥臀大乳一区二区免费视频| 97婷婷大伊香蕉精品视频| 深夜福利日韩在线看| 国产精品久久久久久久久| 国产视频亚洲精品| 视频在线观看99| 91精品在线看| 91色在线视频| 亚洲精品久久久久久久久| 91精品国产色综合| 日韩av在线电影网| 日本19禁啪啪免费观看www| 九九综合九九综合| 亚洲aⅴ日韩av电影在线观看| 欧美日韩国产综合视频在线观看中文| 久久人人爽人人爽人人片av高清| 日韩动漫免费观看电视剧高清| 国产精品永久在线| 中文字幕精品网| 国产精品一区二区av影院萌芽| 97久久精品国产| 亚洲美女视频网站| 色综合伊人色综合网站| 91成品人片a无限观看| 亚洲国产欧美自拍| 九九热精品视频国产| 亚洲精品美女免费| 久久精品美女视频网站| 国内精品久久久久伊人av| 97视频在线观看亚洲| 91精品91久久久久久| 国产一区二区三区三区在线观看| 国产精品视频久| 国产激情综合五月久久| 国产有码在线一区二区视频| 国产精品偷伦免费视频观看的| 欧美综合第一页| 亚洲欧洲在线看| 中文字幕成人精品久久不卡| 国产精品福利网站| 欧美日韩在线一区| 国模视频一区二区三区| 国模叶桐国产精品一区| 欧美黑人狂野猛交老妇| 国产91精品黑色丝袜高跟鞋| 国产91成人video| 久久久久久噜噜噜久久久精品| 日韩视频―中文字幕| 日韩亚洲综合在线| 亚洲国产成人爱av在线播放| 久久亚洲欧美日韩精品专区| 97在线免费观看视频| 91po在线观看91精品国产性色| 久久激情五月丁香伊人| 午夜精品视频在线| 超在线视频97| 欧美亚洲日本黄色| 九九九久久国产免费| 日韩精品视频中文在线观看| 色综合视频网站| 久久久精品免费| 欧美午夜xxx| 狠狠色狠色综合曰曰| 欧美在线激情视频| 欧美日本高清视频| 九九视频这里只有精品| 日韩精品极品在线观看播放免费视频| 自拍偷拍亚洲精品| 久久久999国产| 国产美女久久久| 亚洲女人天堂色在线7777| 欧美与欧洲交xxxx免费观看| 亚洲国产精品高清久久久| 91精品国产自产91精品| 日韩av在线资源| 在线电影欧美日韩一区二区私密| 欧美性猛xxx| 成人免费视频在线观看超级碰| 国产精选久久久久久| 日韩av免费一区| 亚洲综合中文字幕68页| 久久免费视频这里只有精品| 伊人久久久久久久久久久久久| 国产精品成av人在线视午夜片| 在线国产精品视频| 国产美女被下药99| 亚洲精品wwwww| 粉嫩老牛aⅴ一区二区三区| 日韩电影免费在线观看| 久久色免费在线视频| 欧美一级视频免费在线观看| 91黑丝高跟在线| 久久亚洲影音av资源网| 国产成人在线播放| 日韩美女毛茸茸| 91精品国产高清久久久久久91|