
메세지 큐 실습 코드
sender.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define BUFSIZE 1024
typedef struct
{
long msg_type;
int value;
char buf[BUFSIZE];
} msgbuf;
int main()
{
int cnt = 0;
key_t key = 9999;
int msgq_id = 0;
msgbuf msg;
msg.msg_type = 1;
msgq_id = msgget(key, IPC_CREAT | 0666);
if(msgq_id == -1)
{
printf("msgget error\n");
exit(0);
}
while(1)
{
msg.value = ++cnt;
if(cnt >= 10)
{
printf("message send finish");
break;
}
if(msgsnd(msgq_id, &msg, sizeof(msg), IPC_NOWAIT) == -1)
{
printf("msgsnd error\n");
exit(0);
}
printf("value : %d\n", msg.value);
sleep(1);
}
exit(0);
}
receiver.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define BUFSIZE 1024
typedef struct
{
//long 부분은 고정!
long msg_type;
int value;
char buf[BUFSIZE];
} msgbuf;
int main()
{
key_t key = 9999;
int msgq_id = 0;
msgbuf msg;
msg.msg_type = 1;
msgq_id = msgget(key, IPC_CREAT | 0666);
if(msgq_id == -1)
{
printf("msgget error\n");
exit(0);
}
while(1)
{
if(msgrcv(msgq_id, &msg, sizeof(msg), 1, 0) == -1)
{
printf("Message receive finish\n");
exit(0);
}
printf("value : %d\n", msg.value);
}
printf("finsish!!\n");
exit(0);
}
//Create Message
int masgget (key_t key, int msgflg);
//Send Message
int msgsnd(int msqid, struct msgbuf * msgp, size_t msgsize, int msgflg);
//Receive Message
msgrcv(int msgid, struct msgbuf * msgp, size_t msgsize, long msgtype, int msgflg);
//Control Message
msgctl(int msqid, int cmd, struct msqid_ds *buf);

공유메모리 실습 코드
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#define KEY 1234
int main()
{
int shmid;
int *num;
void *memory_segment = NULL;
//이미 공유 메모리가 생성되어 있는 경우
if((shmid = shmget(KEY, sizeof(int), IPC_CREAT|0666)) == -1)
{
printf("shmget error\n");
return -1;
}
printf("shmid : %d\n", shmid);
if((memory_segment = shmat(shmid, NULL, 0)) == (void *)-1)
{
printf("shmat error\n");
return -1;
}
num = (int *)memory_segment;
(*num)++;
printf("num : %d\n", (*num));
return 0;
}
