• <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>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            其他的不管,只是關(guān)注一下alarm的用法,設(shè)定了msgrcv超時。


            環(huán)境是redhat9
            當把發(fā)送緩沖中寫入大于8位數(shù)據(jù)時 可以成功發(fā)送但只能收到8位信息

            代碼如下
            //定義
            struct msgbuf  //消息結(jié)構(gòu)
            {
                    long mtype;
                    char mtext[100];
            }msgbuf;
                                                                                            


            //創(chuàng)建消息隊列
            void  creatque()
            {
                                                                                                                                                           
                    static int msg_que_id=-1;
                    struct sigaction action;
                    /*檢查是否存在的要創(chuàng)建的消息隊列,如果存在到 就刪除它*/
                    msg_que_id=msgget(BOOKING_KEY,0);
                    if(msg_que_id!=-1){
                            if(msgctl(msg_que_id,IPC_RMID,0)==-1){
                                    perror("remove old message");
                                    exit(1);
                            }
                    }
                    /*創(chuàng)建消息隊列*/
                    msg_que_id=msgget(BOOKING_KEY,IPC_CREAT|0666);
                    if(msg_que_id==-1){
                            perror("creat new message list");
                            exit(1);
                    }
                    /*忽略其它一些參數(shù)*/
                    action.sa_handler=SIG_IGN;
                    action.sa_flags=0;
                    sigemptyset(&action.sa_mask);
                    sigaction(SIGINT,&action,NULL);
                    sigaction(SIGQUIT,&action,NULL);
                    sigaction(SIGHUP,&action,NULL);
            }

            //發(fā)消息
            void control(char *c)
            {
                    int send_len;
                    int msg_que_id=-1;
                    struct msgbuf send_msg;
                    memset(send_msg.mtext,'\0',sizeof(send_msg.mtext));
                    send_len=sizeof(long)+sizeof(int);
                    msg_que_id=msgget(BOOKING_KEY,0);
                    if(msg_que_id==-1){
                            perror("get message list id");
                            exit(1);
                    }
                                                                                            
                                                                                            
                    if(!strncasecmp(c,"lk",2)){/*連接狀態(tài)信號*/
                            send_msg.mtype=httpd_stoped;
                            sprintf(send_msg.mtext,"linking");
                            if(msgsnd(msg_que_id,&send_msg,send_len,0)&lt;0){
                                    perror("send message");
                                    exit(1);
                            }
                    }
            }

            //接收消息
            void *other_key(void *data)
            {
                    int msg_que_id=-1;
                    int rece_len,send_len;
                    struct msgbuf rece_msg;
                    memset(rece_msg.mtext,'\0',sizeof(rece_msg.mtext));
                    send_len=sizeof(long)+sizeof(int);
                    msg_que_id=msgget(BOOKING_KEY,0);
                    if(msg_que_id==-1){
                            perror("get message list id");
                            exit(1);
                    }
                    while(1){
                            /*定時器定時LKTIMEOUTs來接收30s一次的連接狀態(tài)信號,*/
                            /*如果時間到而沒有接收到信號則判斷接收方關(guān)閉了監(jiān)視端,服務器將中斷此次連接*/
                                                                                                                                                   
                            alarm(35);
                            rece_len=msgrcv(msg_que_id,&rece_msg,sizeof(msgbuf)-sizeof(long),(int)httpd_stoped,0);
                            if(rece_len&lt;0){
                                    perror("receive message");
                                    exit(1);
                            }
                            if(!strcmp(rece_msg.mtext,"linking")){
                                  alarm(0);
                            }
                            else if(!strcmp(rece_msg.mtext,"q")){
                                     if(msgsnd(msg_que_id,&rece_msg,send_len,0)&lt;0){/*把取出的結(jié)束信息再寫回去(因為一條信息只能被取一次)*/
                                             perror("send message");               /*而取出一次只能結(jié)束一個進程*/
                                             exit(1);
                                     }
                                     exit(1);
                            }
                                                                                                                                                   
                                                                                                                                                   
            }
            }

            Feedback

            # re: 我創(chuàng)建的消息隊列為什么最大只能接收到8位信息--只關(guān)注alarm的用法  回復  更多評論   

            2009-04-30 16:14 by 半島刀客
            在msgsnd的長度參數(shù),最好不要用sizeof()...,請直接用定長試試
            久久亚洲精品成人av无码网站| 久久久女人与动物群交毛片 | 久久嫩草影院免费看夜色| 久久久久国产成人精品亚洲午夜| 亚洲人成网站999久久久综合| 久久精品无码一区二区app| 国产免费久久精品99re丫y| 亚洲欧美国产精品专区久久| 亚洲AV无码久久精品狠狠爱浪潮| 亚洲综合日韩久久成人AV| 精品久久久久久| 无码AV中文字幕久久专区| 久久久久国色AV免费看图片| 国产成人久久精品一区二区三区| 一本久久a久久精品综合夜夜| 亚洲精品无码专区久久同性男| 2021久久精品国产99国产精品| 久久91这里精品国产2020| 精品人妻伦九区久久AAA片69| 国产精品成人精品久久久 | 久久久久免费精品国产| 精品伊人久久大线蕉色首页| 久久亚洲精品成人无码网站| 国产亚洲婷婷香蕉久久精品| 久久天天躁狠狠躁夜夜不卡| 国产91色综合久久免费| 久久九色综合九色99伊人| 国产V亚洲V天堂无码久久久| 久久亚洲欧洲国产综合| 久久综合精品国产二区无码| 久久精品视频一| 中文精品99久久国产| 国产精品欧美久久久久天天影视| 欧美丰满熟妇BBB久久久| 亚洲成av人片不卡无码久久 | 亚洲伊人久久大香线蕉苏妲己| 久久久久亚洲AV无码网站| 久久久久久精品久久久久| 久久久国产99久久国产一| 亚洲va国产va天堂va久久| 蜜臀av性久久久久蜜臀aⅴ麻豆 |