Server (받는쪽)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
struct msgbuf {
long msgtype;
char buf[512];
};
int main(int argc, char **argv)
{
key_t key_id;
int i;
struct msgbuf mybuf;
key_id = msgget((key_t)1234, IPC_CREAT|0666);
if(key_id == -1) {
perror("msgget error : ");
exit(0);
}
while(1) {
if(msgrcv(key_id, (void *)&mybuf, sizeof(struct msgbuf), 1, 0) == -1) {
perror("quit : ");
exit(0);
}
printf("Msg Recv : [%d] [%s] \n", mybuf.msgtype, mybuf.buf);
}
return 0;
}
Client (보내는쪽)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
#include <fcntl.h>
struct msgbuf {
long msgtype;
char buf[512];
};
int main(int argc, char **argv)
{
key_t key_id;
int i, n;
struct msgbuf mybuf;
int fd_r;
int packet_size;
int total_size = 100000000;
int loop_size;
key_id = msgget((key_t)1234, IPC_CREAT|0666);
if (key_id == -1) {
perror("msgget error : ");
exit(0);
}
mybuf.msgtype = 1;
memset(mybuf.buf, 0x00, sizeof(mybuf.buf));
printf("Queue에 전송할 메시지를 입력하세요. -> ");
gets(&mybuf.buf);
if (strlen(mybuf.buf) > 0) {
if (msgsnd(key_id, (void*)&mybuf, sizeof(struct msgbuf), 0) == -1) {
perror("msgsnd error : ");
exit(0);
}
printf("Queue에 메시지 전송 성공.\n");
} else {
printf("Queue에 메시지 전송이 실패 했습니다.\n");
printf(" 입력한 문장을 확인해 주세요. \n");
exit(0);
}
return 0;
}
프로세서간의 통신 방법중 하나인 IPC[Message Queue]에 대한 간단한 샘플이다.
위에 프로그램은 Server 측에서 Key_id (1234) 에 Queue를 대기 하고 있다가
Client 쪽에서 KeyIn으로 받은 데이타를 Queue로 보내준다.