#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
struct _msgbuf
{
long msgtype;
char mtext[256];
char myname[16];
int seq;
};
int main()
{
key_t key_id;
int i;
struct _msgbuf mybuf, rcvbuf;
key_id = msgget((key_t)1234, IPC_CREAT|0666);
if (key_id == -1)
{
perror("msgget error : ");
exit(0);
}
printf("Key is %d\n", key_id);
memset(mybuf.mtext, 0x00, 256);
memset(mybuf.myname, 0x00, 16);
memcpy(mybuf.mtext, "hello world 4", 13);
memcpy(mybuf.myname, "yundream", 8);
mybuf.seq = 0;
i = 0;
while(1)
{
// 짝수일경우 메시지 타입이 4
// 홀수일경우에는 메시지 타입이 3
if (i % 2 == 0)
mybuf.msgtype = 4;
else
mybuf.msgtype = 3;
mybuf.seq = i;
// 메시지를 전송한다.
if (msgsnd( key_id, (void *)&mybuf, sizeof(struct _msgbuf), IPC_NOWAIT) == -1)
{
perror("msgsnd error : ");
exit(0);
}
printf("send %d[%s]\n", i, mybuf.mtext);
i++;
sleep(1);
}
printf("%d \n", rcvbuf.msgtype);
printf("%s \n", rcvbuf.mtext);
printf("%s \n", rcvbuf.myname);
exit(0);
}
/********************************************************************************************/
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
struct _msgbuf
{
long msgtype;
char mtext[256];
char myname[16];
int seq;
};
int main(int argc, char **argv)
{
key_t key_id;
struct _msgbuf mybuf;
int msgtype;//전역변수로 빼야 됩니다.
int errType = 0;
// 아규먼트가 있을경우 msgtype 가 3인 메시지를 받아오고(홀수)
// 아규먼트가 없을경우 msgtype 가 4인 메시지를 받아온다(짝수)
if (argc == 2)
msgtype = 3;
else
msgtype = 4;
key_id = msgget(1234, IPC_CREAT|0666);
if (key_id < 0)
{
perror("msgget error : ");
exit(0);
}
msgtype = 0;
while(1)
{
errType = msgrcv( key_id, (void *)&mybuf, sizeof(struct _msgbuf), msgtype, IPC_NOWAIT);
if (mybuf.mtext[0] == '\0')
{
continue;
}
printf("[%d][%s]\n", mybuf.seq, mybuf.mtext);
memset(&mybuf, 0x00, sizeof(mybuf));
}
exit(0);
}
/***********************************************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* 수신할 message queue 구조체 */
struct msg_buf{
long msgtype;
char mtext[256];
char myname[16];
int seq;
};
int main(int argc,char *argv[]){
key_t queue_id;
int msg_queue_id,type;
struct msg_buf rcvbuf;
/* 유일한 key 생성 */
queue_id = 0x209; ftok(".",'m');
/* 필요하다면 queue를 만들고 연다 */
if((msg_queue_id = msgget(queue_id,IPC_CREAT|0660)) < 0){
perror("msgget error!:");
exit(1);
}
printf("Key is %d\n",msg_queue_id);
rcvbuf.msgtype = 1;
type = rcvbuf.msgtype ;
while(rcvbuf.mtext != "quit"){
/***** message 수신 *******************************************************/
if(msgrcv( msg_queue_id,(void *)&rcvbuf,sizeof(struct msg_buf),type,0) < 0){
perror("msgrcv error!:");
exit(1);
};
printf("To( %s) -",rcvbuf.myname);
printf("Message : %s\n",rcvbuf.mtext);
printf("To( %s) -",rcvbuf.myname);
printf("Message : %s\n",rcvbuf.mtext);
/***** message 수신 종료 **************************************************/
}
/* queue 제거*/
if(msgctl( msg_queue_id,IPC_RMID,0) < 0){
perror("msgctl error!");
exit(1);
}
exit(0);
}
[출처] MSGRCV 예제 플그램|작성자 탱크산타
'UNIX_LINUX_C_C++' 카테고리의 다른 글
Unix C 시스템 시간출력 예제 (0) | 2011.10.16 |
---|---|
원초적 시간 구하기 ㅋㅋㅋㅋㅋㅋㅋ (0) | 2011.10.16 |
Packet sniffer - libpcap사용 (0) | 2011.10.16 |
메시지 큐 - 프로세서간 통신 (0) | 2011.10.16 |
비블럭킹 TCP 연결 예제 (0) | 2011.10.16 |