1. 공유 메모리(Share Memory) 개념
프로세스들간의 데이터를 공유하거나, 데이터를 전달할 때 이용되는 IPC(Inter-Process Communication) 자원이다.
2. 공유 메모리(Share Memory) 관련 주요 함수
1) 헤더 파일
#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> |
2) 주요 함수 목록
- shmget() 공유 메모리 생성 함수
int shmget(key_t key, size_t size, int shmflg) * key : Shared Memory key (유일해야 함) * size : Shared Memory 크기 * shmflg - IPC_CREAT : 기존 key에 해당하는 공유메모리가 없으면 신규로 생성하고, | 연산자를 붙여 접근권한을 준다.(아래 예제 참조) - IPC_EXCL : 기존 key에 해당하는 공유메모리가 있으면 실패로 반환 [반환값] -1 : 실패 시 ID : 성공 시 ID 값 반환 |
- shmat() - 공유 메모리 접근하기 위한 attach 하는 함수
- shmdt() - 공유 메모리에서 detach 하는 함수
- shmctl() - 공유 메모리 제어하기 위한 함수
3. 예제
[shm_server.c]
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#define SHMSZ 30
main()
{
char c;
int shmid;
key_t key;
char *shm, *s;
key=9778;
if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) {
perror("shmget");
exit(1);
}
if ((shm = shmat(shmid, NULL, 0)) == (char*) -1) {
perror("shmat");
exit(1);
}
s = shm;
for (c='a';c<'z';c++)
*s++=c;
*s=NULL;
while (*shm != '*')
sleep(1);
exit(0);
}
[shm_client.c]
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#define SHMSZ 30
main()
{
int shmid;
key_t key;
char *shm, *s;
key=9778;
if ((shmid = shmget(key, SHMSZ, 0666)) < 0) {
perror("shmget");
exit(1);
}
if ((shm = shmat(shmid, NULL, 0)) == (char*) -1) {
perror("shmat");
exit(1);
}
for (s=shm;*s != NULL;s++)
putchar(*s);
putchar('\n');
*shm = '*';
exit(0);
}
'프로그래밍 언어 > C_C++' 카테고리의 다른 글
[예제] 매크로를 이용한 디버깅 예제 (0) | 2016.09.14 |
---|---|
[예제] 가변적인 인자 로깅하는 예제 - stdarg.h 함수 이용 (0) | 2016.09.14 |
[개요] C 표준 사전 정의된 매크로 (0) | 2016.06.17 |
[개요] gcc 컴파일러 옵션 (0) | 2016.06.08 |
[Tips] POSIX와 표준 C라이브러리 (0) | 2016.03.23 |