[OS] Linux OS 프로그래밍 (수정중)

strurao·2023년 3월 23일
0

os

목록 보기
6/6

환경

VirtualBox, Ubuntu

Message Queue in Linux Kernel by C lang

리눅스에서의 메시지 큐를 생성하고 메시지를 전송하는 예시 코드입니다. 이 코드는 리눅스의 시스템 콜 함수인 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;
}

Pthread

POSIX Thread의 약자로 유닉스계열 POSIX시스템에서 병렬적으로 작동하는 소프트웨어를 작성하기 위하여 제공하는 API입니다. 즉 스레드를 편하게 만들수 있게 도와주는 API인거죠!

유닉스계열 운영체제가 뭘까요 일단 리눅스, 솔라리스가 있고, 윈도우에서도 pthread을 이용할 수 있습니다.

참고
https://m.blog.naver.com/whtie5500/221692793640

0개의 댓글