๐ฉฐ C ํ๋ก๊ทธ๋๋ฐ์ ํตํ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ & ๋ฉ์์ง ํ ์ฌ์ฉ ํ๋ก์ธ์ค ๊ตฌํ # 3
# ๊ตฌํํ ํ๋ก๊ทธ๋จ ๊ฐ์
ํ๋ก๊ทธ๋จ ๋ฒํธ | ํ๋ก๊ทธ๋จ 1 | ํ๋ก๊ทธ๋จ 2 | ํ๋ก๊ทธ๋จ 3 |
์ํ ์์ | 1์ด ๊ฐ๊ฒฉ์ผ๋ก 1~10๊น์ง ๊ฐ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ฐจ๋ก๋ก ์ ๋ ฅ |
๋ฃจํ๋ฅผ ๋๋ฉฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ฝ์ด์ ๋ฉ์์ง ํ์ ์ ๋ ฅ |
๋ฃจํ๋ฅผ ๋๋ฉฐ ๋๊ธฐ ํ ๋ฉ์์ง ํ์ ์ ๋ ฅ๋ ๊ฐ ์ค ์ง์๋ง์ ์ฝ์ด์ ์ถ๋ ฅ |
๐ฎ C ์ธ์ด๋ฅผ ํตํ ํ๋ก๊ทธ๋จ # 3 ๊ตฌํ
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MSG_KEY 5678
// ๋ฉ์์ง ํ ๊ตฌ์กฐ์ฒด ์ ์
struct Message {
ใ
คใ
คlong mtype;
ใ
คใ
คint data;
};
int main() {
ใ
คใ
ค// ๋ฉ์์ง ํ ์ฐ๊ฒฐ
ใ
คใ
คint msqid = msgget(MSG_KEY, 0666);
ใ
คใ
คif (msqid == -1) {
ใ
คใ
คใ
คใ
คperror("msgget");
ใ
คใ
คใ
คใ
คexit(1);
ใ
คใ
ค}
ใ
คใ
คprintf("Program 3 is running...\n");
ใ
คใ
คint received_count = 0;
ใ
คใ
คwhile (received_count < 5) {
ใ
คใ
คใ
คใ
คstruct Message message;
ใ
คใ
คใ
คใ
คmsgrcv(msqid, &message, sizeof(int), 1, 0); // ๋ฉ์์ง ํ์
1์ธ ๋ฉ์์ง ์์
ใ
คใ
คใ
คใ
คif (message.data % 2 == 0) {
ใ
คใ
คใ
คใ
คใ
คใ
คprintf("Program 3 received even value from message queue: %d\n", message.data);
ใ
คใ
คใ
คใ
คใ
คใ
คreceived_count++;
ใ
คใ
คใ
คใ
ค}
ใ
คใ
ค}
ใ
คใ
ค// ๋ฉ์์ง ํ ์ญ์ ํ์ง ์์
ใ
คใ
คprintf("Program 3 finished.\n");
ใ
คใ
คreturn 0;
}
1. ํ๋ก๊ทธ๋จ ์คํ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ include
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
++ ๊ฐ Include ๋ฌธ ์์ธ ์ค๋ช
include ๋ฌธ | ์ญํ |
stdio.h | ํ์ค ์ ์ถ๋ ฅ ํจ์๋ฅผ ํฌํจํ๋ ํค๋ ํ์ผ |
stdlib.h | C ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ธฐ๋ณธ์ ์ธ ์ ํธ๋ฆฌํฐ ํจ์๋ค์ ํฌํจํ๋ ํค๋ ํ์ผ |
unistd.h | ์ ๋์ค ๋ฐ ๋ฆฌ๋
์ค ์์คํ
์์ ์ ๊ณตํ๋ ์์คํ ํธ์ถ์ ํฌํจํ๋ ํค๋ ํ์ผ |
sys/types.h | ์์คํ ๋ฐ์ดํฐ ํ์์ ์ ์ํ๋ ํค๋ ํ์ผ |
sys/ipc.h | IPC(Inter-Process Communication) ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ํค๋ ํ์ผ |
sys/msg.h | ์์คํ V IPC ๋ฉ์์ง ํ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ํค๋ ํ์ผ |
2. ๋ฉ์์ง ํ๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ ํค ์ ์
#define MSG_KEY 5678
3. ๋ฉ์์ง ํ์์ ๊ตํ๋๋ ๋ฉ์์ง ํ์์ ์ ์
// ๋ฉ์์ง ํ ๊ตฌ์กฐ์ฒด ์ ์
struct Message {
ใ
คใ
คlong mtype;
ใ
คใ
คint data;
};
4. ๋ฉ์์ง ํ ์ฐ๊ฒฐ
int main() {
ใ
คใ
ค// ๋ฉ์์ง ํ ์ฐ๊ฒฐ
ใ
คใ
คint msqid = msgget(MSG_KEY, 0666);
ใ
คใ
คif (msqid == -1) {
ใ
คใ
คใ
คใ
คperror("msgget");
ใ
คใ
คใ
คใ
คexit(1);
ใ
คใ
ค}
++ ์ฝ๋ ์ค๋ช ์์ธ
์ฝ๋ | ์ค๋ช |
msgget(MSG_KEY, 0666) | MSG_KEY ๋งคํฌ๋ก ์ ์ ํ ๋ฉ์์ง ํ ์ฐ๊ฒฐ |
perror("msgget") | ์๋ฌ ๋ฐ์ ์ ๋ฉ์ธ์ง ์ถ๋ ฅ |
exit(1) | ์๋ฌ ๋ฐ์ ์ ํ๋ก๊ทธ๋จ ์ข ๋ฃ |
5. 5๊ฐ์ ์ง์ ๋ฉ์์ง๋ฅผ ์์ ํ ๋๊น์ง while ๋ฃจํ ์คํ
printf("Program 3 is running...\n");
ใ
คใ
คint received_count = 0;
ใ
คใ
คwhile (received_count < 5) {
ใ
คใ
คใ
คใ
คstruct Message message;
ใ
คใ
คใ
คใ
คmsgrcv(msqid, &message, sizeof(int), 1, 0); // ๋ฉ์์ง ํ์
1์ธ ๋ฉ์์ง ์์
ใ
คใ
คใ
คใ
คif (message.data % 2 == 0) {
ใ
คใ
คใ
คใ
คใ
คใ
คprintf("Program 3 received even value from message queue: %d\n", message.data);
ใ
คใ
คใ
คใ
คใ
คใ
คreceived_count++;
ใ
คใ
คใ
คใ
ค}
ใ
คใ
ค}
++ ์ฝ๋ ์ค๋ช ์์ธ
์ฝ๋ | ์ค๋ช |
received_count | ๋ฐ์ ๋ฉ์์ง ์๋ฅผ ์ ์ฅํ๋ ๋ณ์ |
while (received_count < 5) | ์ง์ ๋ฉ์์ง 5๊ฐ ์์ ์ ์ข ๋ฃ |
msgrcv(msqid, &message, sizeof(int), 1, 0) | ๋ฉ์์ง ํ์์ ์ ํ์ด 1์ธ ์ง์ ๋ฉ์์ง ์์ |
6. ๋ฉ์์ง ํ๋ฅผ ๋ณด์กดํ ์ํ์์ ํ๋ก๊ทธ๋จ ์ข ๋ฃ
// ๋ฉ์์ง ํ ์ญ์ ํ์ง ์์
ใ
คใ
คprintf("Program 3 finished.\n");
ใ
คใ
คreturn 0;
}