17 消息队列2

来源:互联网 发布:小程序 post php接收 编辑:程序博客网 时间:2024/05/20 01:46

1. 同一进程间发送接收信息示例,熟练使用几个函数。


2. 示例,创建消息队列 --> 写队列,类型100,--> 第一次读队列 --> 第二次读队列(阻塞) --> 删除队列:

#include "sys/types.h"#include "sys/msg.h"#include "signal.h"#include "unistd.h"#include "stdio.h"#include "stdlib.h"#include "string.h"struct msgbuf{  long type;  char voltage[124];  char ID[4];};int main(){  int msgid;  int readret;  struct msgbuf sendbuf,recvbuf;  msgid=msgget(IPC_PRIVATE,0777);  if(msgid <0)  {printf("creat message queue failure\n");return -1;  }  printf("creat message queue  sucess msgid=%d\n",msgid);  system("ipcs -q");  //init sendbuf  sendbuf.type=100;  printf("please input message:\n");  fgets(sendbuf.voltage,124,stdin);  //start write message to message queue  msgsnd(msgid,(void *)&sendbuf,strlen(sendbuf.voltage),0);  //start read message from message queue  memset(recvbuf.voltage,0,124);  readret=msgrcv(msgid,(void *)&recvbuf,124,100,0);  printf("recv:%s",recvbuf.voltage);  printf("readret=%d\n",readret);  //second read message queue  msgrcv(msgid,(void *)&recvbuf,124,100,0);  printf("second read after\n");  //delete message queue  msgctl(msgid,IPC_RMID,NULL);  system("ipcs -q");  return 0;}


执行结果:

alex@alex-VirtualBox:~/Share/process/seventeen$ gcc msg.calex@alex-VirtualBox:~/Share/process/seventeen$ ./a.outcreat message queue  sucess msgid=32768------ Message Queues --------key        msqid      owner      perms      used-bytes   messages0x00000000 32768      alex       777        0            0please input message:hellorecv:helloreadret=6



0 0
原创粉丝点击