#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
// 핸들러 함수 정의
void handlerFunc(int sig) {
printf("handlerFunc() 호출됨\n");
// SIGINT : 터미널 인터럽트
// SIG_DFL : 기본 행동 수행, 메인 함수가 하던 일을 계속 수행하고 한 번 더 SIGINT가 오는 경우 프로세스 종료
signal(SIGINT, SIG_DFL);
}
int main() {
// SIGINT(키보드 인터럽트) 신호를 받으면 handlerFunc 수행
signal(SIGINT, handlerFunc);
int count = 0;
while(1) {
printf("count : %d\n", count++);
sleep(1);
}
exit(0);
}
#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 BUFFER_SIZE 1024
// 메세지 형태 정의
typedef struct {
long msgtype;
int value;
char buf[BUFFER_SIZE];
} msgbuf;
int main() {
int key_id;
msgbuf mybuf;
int count = 0;
// 메세지 생성
key_id = msgget((key_t) 1234, IPC_CREAT|0666);
if (key_id == -1) {
perror("msgget() error");
exit(0);
}
// 메세지 타입 설정
mybuf.msgtype = 1;
while (1) {
// value 값 1 증가시켜서 메세지 전송
mybuf.value = count++;
printf("value : %d\n", mybuf.value);
if (msgsnd(key_id, &mybuf, sizeof(msgbuf), IPC_NOWAIT) == -1) {
perror("msgsnd() error");
exit(0);
}
sleep(10);
}
}
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 BUFFER_SIZE 1024
// 메세지 형태 정의
typedef struct {
long msgtype;
int value;
char buf[BUFFER_SIZE];
} msgbuf;
int main() {
int key_id;
msgbuf mybuf;
long msgtype = 1; // 수신받을 메세지 타입 미리 설정
// 메세지 생성
key_id = msgget((key_t) 1234, IPC_CREAT|0666);
if (key_id == -1) {
perror("msgget() error");
exit(0);
}
while (1) {
// 메세지 타입이 1 일 때 수신
if (msgrcv(key_id, &mybuf, sizeof(msgbuf), 1, 0) == -1) {
perror("msgrcv() error");
exit(0);
}
// 수신 받은 메세지에서 value 출력
printf("value : %d\n", mybuf.value);
}
}
- #include 에 포함
- 새 공유 메모리 세그먼트를 생성하거나 키를 찾는데 사용
- 0666 | IPC_CREAT
0666 : Linux에서 일반적인 엑세스 권한, 메모리 세그먼트 권한 지시
IPC_CREAT : 공유 메모리에 대한 새 메모리 세그먼트를 만들도록 지시
- 참고 : [What is the use of IPC_CREAT | 0666 Flag in shmget()?](https://stackoverflow.com/questions/40380327/what-is-the-use-of-ipc-creat-0666-flag-in-shmget-function-in-c) - Stackoverflow