真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

進(jìn)程間通信:消息隊(duì)列的實(shí)現(xiàn)-創(chuàng)新互聯(lián)

一.消息隊(duì)列

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的蕭縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

  消息隊(duì)列是一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)送一個(gè)數(shù)據(jù)塊的方法,所以消息隊(duì)列是基于消息的,而管道則是基于字節(jié)流的。消息隊(duì)列提供的是進(jìn)程間的雙向通信。

消息隊(duì)列中的幾個(gè)原型函數(shù):

  1.獲取消息信息:int msgget(key_t key,int msgflag);key 是用ftok()函數(shù)創(chuàng)建的

  2.接收消息:ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

  3.發(fā)送消息:int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

  4.銷毀消息信息:int msfctl(int msgid)

查看key值命令:ipcs -q

刪除key值命令:ipcs -q key值

//comm.h
#pragma once
#include
#include
#include
#include
#include
#include
#include
#define _PATH_ "."  //路徑
#define _PROJ_ID_ 0x7777  
#define _BLOCK_SIZE_ 1024
#define _CLIENT_TYPE_ 1
#define _SERVER_TYPE_ 2
struct msgBuf  //定義一個(gè)消息結(jié)構(gòu)體
{
  long mtype; //消息類型
  char mtext[_BLOCK_SIZE_];
 };

static int creat_msg_queue(); 
int get_msg_queue();
int send_msg_queue(int msg_id,const char*info,long type);
int recv_msg_queue(int msg_id,char info[],long type);
int destroy_msg_queue(int msg_id);

//comm.c

#include"comm.h"

int get_msg_queue()
{
  return creat_msg_queue();
 }

static int creat_msg_queue()
{
  key_t key=ftok(_PATH_,_PROJ_ID_);
  if(key<0)
   {
     perror("ftok");
     return -1;
    }
  int msg_id=msgget(key,IPC_CREAT);
  if(msg_id<0)
  {
    perror("msgget");
    return -1;
   }

   return msg_id;
}


int send_msg_queue(int msg_id,const char*info,long type)//將要發(fā)送的消息存入mtext中
{
   struct msgBuf msg;
   msg.mtype=type;
   memset(msg.mtext,'\0',sizeof(msg.mtext));
   strcpy(msg.mtext,info);
   if(msgsnd(msg_id,&msg,sizeof(msg.mtext),0)<0)
   {
     perror("msgsnd");
     return -1;

    }
    return 0;
}

int recv_msg_queue(int msg_id,char* info,long type)//將mtext中的消息拿出放入info中
{
  struct msgBuf msg;
  if(msgrcv(msg_id,&msg,sizeof(msg.mtext),type,0)<0)
  {  
     perror("msgrcv");
     return -1;
   }
   strcpy(info,msg.mtext);
   return 0;
}

int destroy_msg_queue(int msg_id)
{
  if(msgctl(msg_id,IPC_RMID,NULL)<0)
  {
    perror("msgctl");
    return -1;
  }
  return 0;

}
                                                                                         //server.c  先發(fā)送后接收
                                                                                         
#include"comm.h"

int main()
{
  int msgid=get_msg_queue();
  if(msgid<0)
  {
    exit(1);
   }
   char info[_BLOCK_SIZE_];

   while(1)
   {
     memset(info,'\0',sizeof(info));
     printf("please input:");
     fflush(stdout);
     gets(info);
     if(send_msg_queue(msgid,info,_SERVER_TYPE_)<0)
      {
        printf("send  information failed\n");
        exit(1);
       }
      if(recv_msg_queue(msgid,info,_CLIENT_TYPE_)<0)
      {
        printf("recieve information failed\n");
        exit(1);
     }
     printf("client:%s\n",info);
}
  destroy(msgid);
  return 0;
}


//client.c 先接收后發(fā)送
 #include"comm.h"
 int main()
{
   int msgid=get_msg_queue();
    if(msgid<0)
     {
      exit(1);
      }
     char info[_BLOCK_SIZE_];
     memset(info,'\0',sizeof(info));
     printf("when input stop endding...\n");
     while(1)
     {
        if(recv_msg_queue(msgid,info,_SERVER_TYPE_)<0)
          {
            printf("recieve information failed\n");
            exit(1);
           }
       else
         {
   
           if(strcmp("stop",info)==0)
           {
             return 0;
            }
          printf("server :%s\n",info);
         }

      printf("please input:");
      fflush(stdout);
      gets(info);
      if(send_msg_queue(msgid,info,_CLIENT_TYPE_)<0)
       {
         printf("send information failed\n");
         exit(1);
        }
    }
  destroy(msgid);
  return 0;

}

運(yùn)行結(jié)果:

進(jìn)程間通信 :消息隊(duì)列的實(shí)現(xiàn)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享文章:進(jìn)程間通信:消息隊(duì)列的實(shí)現(xiàn)-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/cspesh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部