您的位置:首页 > 运维架构 > Linux

linux 消息队列简单例程

2011-04-29 17:52 393 查看
1.首先介绍下BUFSIZ这个关键字什么意思:

BUFSIZ[=8192],这个值在你的stdio.h的182行有申明

2.发送端程序




#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>

#define MAX_TEXT 512
struct my_msg_st
{
int my_msg_type;
char msg_text[MAX_TEXT];
};

int main(int argc,char *argv[])
{
int running=1;
struct my_msg_st some_data;
int msgid;
char buffer[BUFSIZ];

if((msgid=msgget((key_t)12345,0666|IPC_CREAT))==-1)
{
perror("msgget");
exit(EXIT_FAILURE);
}

while(running)
{
printf("Enter the mssage to send:");
fgets(buffer,BUFSIZ,stdin);
some_data.my_msg_type=1;
strcpy(some_data.msg_text,buffer);

if((msgsnd(msgid,(void *)&some_data,MAX_TEXT,0))==-1)
{
perror("msgsnd");
exit(EXIT_FAILURE);
}
if(strncmp(buffer,"end",3)==0)
{
running=0;
}
}
return 0;
}


3.接收端



rec.c//this is the receiver program
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>

struct my_msg_st
{
int my_msg_type;
char msg_text[BUFSIZ];
};

int main(int argc,char *argv[])
{
int running=1;
int msgid;
struct my_msg_st some_data;
int msg_to_receive=0;

if((msgid=msgget((key_t)12345,0666 | IPC_CREAT))==-1)
{
perror("msgget");
exit(EXIT_FAILURE);
}

while(running)
{
if(msgrcv(msgid,(void *)&some_data,BUFSIZ,msg_to_receive,0)==-1)
{
perror("msgrcv");
exit(EXIT_FAILURE);
}
printf("receiver mssage:%s",some_data.msg_text);
if(strncmp(some_data.msg_text,"end",3)==0)

running=0;
}

if(msgctl(msgid,IPC_RMID,0)==-1)
{
fprintf(stderr,"msgctl(IPC_RMID) failed/n");
exit(EXIT_FAILURE);
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: