亚洲综合社区欧美综合色-欧美逼逼一区二区三区-国产老熟女高潮精品网站-国产日韩最新视频在线看

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內容

Linux關于消息隊列的使用

發(fā)布時間:  2012/8/10 14:21:21
 今天完成消息隊列的使用。

  消息隊列類似FIFO,但是可以實現(xiàn)隨機查詢。

  主要函數(shù):msgget,msgsnd,msgrcv,msgctl

  實驗實現(xiàn)兩個進程之間的通信。

  一個發(fā)送,一個接受。并不需要額外實現(xiàn)進程同步。

  源代碼來自華清遠見:

  發(fā)送:

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #define BUFFER_SIZE 512

  struct message

  {

  long msg_type;

  char msg_text[BUFFER_SIZE];

  };

  int main()

  {

  int qid;

  key_t key;

  struct message msg;

  //ftok根據(jù)不同路徑和關鍵字產(chǎn)生標準的KEY

  if((key = ftok(".", 'a')) == -1)

  {

  perror("ftok");

  exit(1);

  }

  if((qid = msgget(key, IPC_CREAT|0666)) == -1)//創(chuàng)建

  {

  perror("msgget");

  exit(1);

  }

  printf("open queue %dn", qid);

  while(1)

  {

  printf("enter some message to the queue:");

  if((fgets(msg.msg_text, BUFFER_SIZE, stdin)) == NULL)

  {

  puts("no message");

  exit(1);

  }

  msg.msg_type = getpid();//消息類型為進程號

  if((msgsnd(qid, &msg, strlen(msg.msg_text), 0)) < 0)//發(fā)送消息

  {

  perror("message posted");

  exit(1);

  }

  if(strncmp(msg.msg_text, "quit", 4) == 0)

  {

  break;

  }

  }

  exit(0);

  }

  接收:

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #define BUFFER_SIZE 512

  struct message

  {

  long msg_type;

  char msg_text[BUFFER_SIZE];

  };

  int main()

  {

  int qid;

  key_t key;

  struct message msg;

  if((key = ftok(".", 'a')) == -1)

  {

  perror("ftok");

  exit(1);

  }

  if((qid = msgget(key, IPC_CREAT|0666)) == -1)//創(chuàng)建

  {

  perror("msgget");

  exit(1);

  }

  printf("open queue %dn", qid);

  do

  {

  memset(msg.msg_text, 0, BUFFER_SIZE);

  if(msgrcv(qid, (void*)&msg, BUFFER_SIZE, 0, 0) < 0)//接收消息

  {

  perror("msgrcv");

  exit(1);

  }

  printf("the message from process %d : %s", msg.msg_type, msg.msg_text);

  }while(strncmp(msg.msg_text, "quit", 4));

  if((msgctl(qid, IPC_RMID, NULL)) < 0)//從系統(tǒng)內核移走消息隊列

  {

  perror("msgctl");

  exit(1);

  }

  exit(0);

  }

  打開兩個終端,1號發(fā)送,2號接收


本文出自:億恩科技【1tcdy.com】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線