티스토리 뷰
반응형
(2009/09/27 15:16 작성)
출처: FALiNUX FORUM
2008.01.28 15:18:14 (*.105.125.81)
설명
shmget() 함수는 공유 메모리를 생성합니다.
공유 메모리는 단어 뜻에서 알 수 있듯이 하나의 프로세스에서가 아니라 여러 프로세스가 함께 사용하는 메모리를 말합니다. 이 공유 메모리를 이용하면 프로세스끼리 통신을 할 수 있으며, 같은 데이터를 공유할 수 있습니다.
이렇게 같은 메모리 영역을 공유하기 위해서는 공유 메모리를 생성한 후에 프로세스의 자신의 영역에 첨부를 한 후에 마치 자신의 메모리를 사용하듯 사용합니다.
즉, 공유 메모리를 사용하기 위해서는 공유 메모리를 생성한 후에, 이 메모리가 필요한 프로세스는 필요할 때 마다 자신의 프로세스에 첨부를 한 후에 다른 메모리를 사용하듯 사용하면 되겠습니다.
헤더 | #include <sys/ipc.h> | |||||||||||||
형태 | int shmget(key_t key, int size, int shmflg); | |||||||||||||
인수 |
| |||||||||||||
반환 |
|
예제
예제를 위해 두 개의 프로세스를 만들겠습니다. counter.c 는 공유 메모리에 1초 마다 0부터 계속 증가하는 카운터 문자열을 공유 메모리에 넣으면 show_counter.c에서 공유 메모리를 화면에 출력하도록 하겠습니다.
// counter.c 공유 메모리를 생성하고 공유 메모리에 // 카운터 문자열을 계속 갱신하여 넣습니다. #include <stdio.h> // printf() #include <unistd.h> // sleep() #include <sys/ipc.h> #include <sys/shm.h> #define KEY_NUM 9527 #define MEM_SIZE 1024 int main( void) { int shm_id; void *shm_addr; int count; if ( -1 == ( shm_id = shmget( (key_t)KEY_NUM, MEM_SIZE, IPC_CREAT¦0666))) { printf( "공유 메모리 생성 실패\n"); return -1; } if ( ( void *)-1 == ( shm_addr = shmat( shm_id, ( void *)0, 0))) { printf( "공유 메모리 첨부 실패\n"); return -1; } count = 0; while( 1 ) { sprintf( (char *)shm_addr, "%d", count++); // 공유 메모리에 카운터 출력 sleep( 1); } return 0; } // show_counter.c counter.c가 공유 메모리에 넣는 // 카운터 문자열을 화면에 계속 출력합니다. #include <stdio.h> // printf() #include <unistd.h> // sleep() #include <sys/ipc.h> #include <sys/shm.h> #define KEY_NUM 9527 #define MEM_SIZE 1024 int main( void) { int shm_id; void *shm_addr; if ( -1 == ( shm_id = shmget( (key_t)KEY_NUM, MEM_SIZE, IPC_CREAT¦0666))) { printf( "공유 메모리 생성 실패\n"); return -1; } if ( ( void *)-1 == ( shm_addr = shmat( shm_id, ( void *)0, 0))) { printf( "공유 메모리 첨부 실패\n"); return -1; } while( 1 ) { printf( "%s\n", (char *)shm_addr); // 공유 메모리를 화면에 출력 sleep( 1); } return 0; }
]$ gcc counter.c -o counter
]$ gcc show_counter.c -o show_counter
]$ ./counter &
[1] 8077
]$ ./show_counter
2
3
4
5
6
7
8 :
반응형
'Devolopment > C, C++' 카테고리의 다른 글
man strtoul (strtoull) (0) | 2015.06.01 |
---|---|
C에서 (쵸)간단하게 배열크기 구하는 법 (0) | 2015.06.01 |
string_explode() (0) | 2015.05.29 |
Free the array at C (0) | 2015.05.29 |
C 언어로 정수에서 1이 설정된 비트(Bit) 수 세기 (0) | 2015.05.29 |
반응형
최근에 달린 댓글