知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

linux消息序列(进程间通信)

发布时间:2014-09-05 15:52:43作者:知识屋


linux消息序列(进程间通信)
 
[cpp] 
#include <stdlib.h>  
#include <stdio.h>  
#include <string.h>  
#include <errno.h>  
#include <unistd.h>  
#include <sys/types.h>  
#include <sys/ipc.h>  
#include <sys/msg.h>  
    www.zhishiwu.com  
//需要自己定义的消息队列结构  
struct msgStuct  
{  
  long int msgType;  
  char strMsg[1024];  
};  
  
int  
main ()  
{  
  struct msgStuct msg_data;  
  int msgid;  
  char buffer[1024];  
  //创建一个消息队列  
  if ((msgid= msgget ((key_t) 2234, 0666 | IPC_CREAT)) == -1)  
    {    www.zhishiwu.com  
      perror ("msgget failed with error: %d/n");  
      exit (EXIT_FAILURE);  
    }  
  while (1)  
    {  
      printf ("Send message: ");  
      fgets (buffer, 1024, stdin);  
    //初始化消息类型  
      msg_data.msgType = 1;  
      strcpy (msg_data.strMsg, buffer);  
    //发送消息  
      if (msgsnd (msgid, (void *) &msg_data, 1024, 0) == -1)  
    {  
      fprintf (stderr, "msgsnd failed/n");  
      exit (EXIT_FAILURE);  
    }  
      if (strncmp (buffer, "end", 3) == 0)  
    {  
      break;  
    }  
    }  
  exit (EXIT_SUCCESS);  
}    www.zhishiwu.com  
 
[cpp] 
#include <stdlib.h>  
#include <stdio.h>  
#include <string.h>  
#include <errno.h>  
#include <unistd.h>  
#include <sys/types.h>  
#include <sys/ipc.h>  
#include <sys/msg.h>  
  
//需要自己定义的消息队列结构  
struct msgStuct  
{  
  long int msgType;  
  char strMsg[1024];  
};  
  
int  
main ()  
{    www.zhishiwu.com  
  int msgid;  
  struct msgStuct msg_data;  
  //接收消息优先级  
  long int msgPriority = 0;//从队列中取第一个  
  //创建一个消息队列  
 
  if ((msgid= msgget ((key_t) 2234, 0666 | IPC_CREAT)) == -1)//类似open()创建一个文件返回它的文件描述符,这里是消息序列  
    {  
      perror ("msgget failed with error");  
      exit (EXIT_FAILURE);  
    }  
  while (1)  
    {  
    //接收消息  
      if (msgrcv (msgid, (void *) &msg_data, 1024,  
          msgPriority, 0) == -1)  
    {  
      perror ("msgrcv failed with error");  
      exit (EXIT_FAILURE);  
    }  
      printf ("Received message: %s", msg_data.strMsg);  
      if (strncmp (msg_data.strMsg, "end", 3) == 0)  
    {    www.zhishiwu.com  
      break;  
    }  
    }  
  //删除消息队列  
  if (msgctl (msgid, IPC_RMID, 0) == -1)  
    {  
      fprintf (stderr, "delete messagequeue error/n");  
      exit (EXIT_FAILURE);  
    }  
  exit (EXIT_SUCCESS);  
}  
 
第一个是send.c,第二个是recieve.c
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜