日期:2014-05-16  浏览次数:20600 次

linux消息队列简析

消息队列提供了一种在两个不相关的进程之间传递数据的相当简单且有效的方法:


消息发送端代码:


#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <sys/types.h>


int message_id;


struct my_message
{
long int message_type;
char buf[BUFSIZ];
};
struct my_message message;


int main(void)
{


int ret;
int running = 1;
char buffer[BUFSIZ];

     
  // 打开或创建消息队列
message_id = msgget((key_t)1234, 0666|IPC_CREAT);
if(message_id == -1)
{
perror("fail to msgget");
exit(1);
}
memset(&message, 0, sizeof(struct my_message));


while(running)
{

printf("Please input text\n");

fgets(buffer, BUFSIZ, stdin);

//发送类型为8的消息

message.message_type = 8;
strcpy((message.buf), buffer);

//发送消息,消息长度为message.buf长度,不包括message_type长度;IPC_NOWAIT设置不阻塞
ret = msgsnd(message_id, (const void *)&message, sizeof(message.buf), 0|IPC_NOWAIT);
if(ret == 0)
{
printf("send message:%s \n", message.buf);
}
else
{
perror("fail to msgsnd");