2 분 소요

프로세스간 통신을 IPC(inter process communication)이라고 한다.

시그널 : 가장 오래된 방식.

시그널 전송 : kill(pid, SIGUSR1); /-pid에 해당하는 프로세스에 SIGUSR1을 전송*-

시그널 handler 등록

signal(SIGUSR1, (void*)handler);

void handler().. «-  SIGUSR1이 호출되면 호출되게 된다.

시스템 V에서 제공하는 IPC는 아래와 같다.

       
시스템콜 세마포어 메시지큐 공유 메모리
헤더파일 선언 sys/sem.h sys/msg.h sys/shm.h
생성과 오픈 시스템 콜 semget msgget shmget
IPC 제어를 위한 시스템 콜 semctl msgctl shmctl
IPC 동작을 위한 시스템 콜 semop msgsnd msgrcv shmat shmdt

shm 사용방법

http://forum.falinux.com/zbxe/?document_srl=423456

간단한 shm 사용한 code.

  1. ipc_maker.c 에서는 shared memory를 할당하고 1초에 한번씩 값을 넣는다.

  2. ipc_shower.c에서는 shared memory를 1초에 한번씩 읽어서 print한다.

//————————— ipc_maker.c ——————————–

1 // this is IPC test sample code

2

3 #include

4 #include  //sleep()

5 #include <sys/ipc.h>

6 #include <sys/shm.h>

7

8 #define KEY 0x1234

9 #define MEM_SIZE 1024

10

11 void main(void)

12 {

13         int id;

14         void *addr;

15         int count;

16

17         id = shmget((key_t)KEY, MEM_SIZE, (IPC_CREAT 0666));

18         // KEY값을 가지는 MEM_SIZE만큼 할당한 shared memory를 id값으로 만든다.

19         addr = shmat(id, (void *)0, 0);

20     // id값을 가지고 있는 shared memory의 address를 가져온다.

21         count =0;

22

23         while(1)

24         {

25         //      printf(“maker : %d\n”, count++);

26                 sprintf((char*)addr, “%d”, count++);

27                 sleep(1);

28         }

29 }

//————————— ipc_shower.c ——————————–

1 // this is IPC test sample code

2 #include

3 #include

4 #include <sys/ipc.h>

5 #include <sys/shm.h>

6

7 #define KEY 0x1234

8 #define MEM_SIZE 1024

9

10 void main(void)

11 {

12         int id;

13         void *addr;

14

15         id = shmget((key_t)KEY, MEM_SIZE, IPC_CREAT 0666);

16         addr = shmat(id, (void *)0, 0);

17

18         while(1)

19         {

20                 printf(“shower: %s\n”,(char*)addr);

21                 sleep(1);

22         }

23 }

//————————————————————————-

Build

$ gcc -g -o m ipc_maker.c

$ gcc -g -o s ipc_show.c

결과

$ ./m &

[1] 9391

$ ./s

shower: 1

shower: 2

shower: 3

shower: 4

\