VirtualBox, Ubuntu
리눅스에서의 메시지 큐를 생성하고 메시지를 전송하는 예시 코드입니다. 이 코드는 리눅스의 시스템 콜 함수인 msgget, msgsnd를 사용하여 메시지 큐를 생성하고 데이터를 보내는 예시입니다.
아래 코드에서 msgget 함수는 key 값으로 메시지 큐를 생성하고, 생성된 메시지 큐의 식별자를 반환합니다. msgsnd 함수는 메시지 큐 식별자와 메시지를 구성하는 구조체 변수, 그리고 메시지의 크기와 전송 옵션을 입력받아 메시지를 전송합니다. msgctl 함수는 생성된 메시지 큐를 삭제합니다.
이 예시 코드를 실행하면, "메시지 큐 생성 완료"와 "메시지 전송 완료" 등의 메시지가 출력되며, 메시지 전송 후 메시지 큐가 삭제됩니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msgbuf {
long mtype; // 메시지 타입
char mtext[1024]; // 메시지 내용
};
int main() {
key_t key;
int msgid;
struct msgbuf message;
// 메시지 큐의 고유한 키 생성
if ((key = ftok("msgq_example", 'B')) == -1) {
perror("ftok");
exit(1);
}
// 메시지 큐 생성
if ((msgid = msgget(key, 0644 | IPC_CREAT)) == -1) {
perror("msgget");
exit(1);
}
printf("메시지 큐 생성 완료\n");
// 메시지 전송
message.mtype = 1;
strcpy(message.mtext, "메시지 전송 테스트");
if (msgsnd(msgid, &message, sizeof(message.mtext), 0) == -1) {
perror("msgsnd");
exit(1);
}
printf("메시지 전송 완료\n");
// 메시지 큐 삭제
if (msgctl(msgid, IPC_RMID, NULL) == -1) {
perror("msgctl");
exit(1);
}
printf("메시지 큐 삭제 완료\n");
return 0;
}
POSIX Thread의 약자로 유닉스계열 POSIX시스템에서 병렬적으로 작동하는 소프트웨어를 작성하기 위하여 제공하는 API입니다. 즉 스레드를 편하게 만들수 있게 도와주는 API인거죠!
유닉스계열 운영체제가 뭘까요 일단 리눅스, 솔라리스가 있고, 윈도우에서도 pthread을 이용할 수 있습니다.