进程间通信之:消息队列

时间:2013-09-13来源:网络

以下是消息队列接收端的代码:

/*msgrcv.c*/

#includesys/types.h>

#includesys/ipc.h>

#includesys/msg.h>

#includestdio.h>

#includestdlib.h>

#includeunistd.h>

#includestring.h>

#defineBUFFER_SIZE512

structmessage

{

longmsg_type;

charmsg_text[BUFFER_SIZE];

};

intmain()

{

intqid;

key_tkey;

structmessagemsg;

/*根据不同的路径和关键字产生标准的key*/

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

{

perror(ftok);

exit(1);

}

/*创建消息队列*/

if((qid=msgget(key,IPC_CREAT|0666))==-1)

{

perror(msgget);

exit(1);

}

printf(Openqueue%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(Themessagefromprocess%d:%s,msg.msg_type,msg.msg_text);

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

/*从系统内核中移走消息队列*/

if((msgctl(qid,IPC_RMID,NULL))0)

{

perror(msgctl);

exit(1);

}

exit(0);

}

以下是程序的运行结果。输入“quit”则两个进程都将结束。

$./msgsnd

Openqueue327680

Entersomemessagetothequeue:firstmessage

Entersomemessagetothequeue:secondmessage

Entersomemessagetothequeue:quit

$./msgrcv

Openqueue327680

Themessagefromprocess6072:firstmessage

Themessagefromprocess6072:secondmessage

Themessagefromprocess6072:quit

1 2 3

关键词: 进程间通信 消息队列 Linux 操作系统 msgget

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版