728x90
반응형
[IPC] shared memory 예제 코드
1. 구조
- 커널에서 제공하는 메모리를 이용한 프로세스가 데이터를 공유하는 구조이다.
- 자세한 설명은 다음 포스트 참조
[프로세스간 통신] IPC(inter process communication) 종류
2. 예제 코드
(1) Header
#ifndef __SHARE_MEMORY_H__ #define __SHARE_MEMORY_H__ #define SHM_INFO_COUNT 30 typedef struct _shm_info{ char str_ip[40]; unsigned int int_ip; unsigned int int_id; }SHM_INFOS; #endif//__SHARE_MEMORY_H__
(2) shared Memory Writing 코드
#include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/shm.h> #include <string.h> #include <unistd.h> #include "share_memory.h" int main() { int shmid; int i; SHM_INFOS *shm_info= NULL; void *shared_memory = (void *)0; // 공유메모리 공간을 만든다. shmid = shmget((key_t)3836, sizeof(SHM_INFOS)*SHM_INFO_COUNT, 0666|IPC_CREAT); if (shmid == -1) { perror("shmget failed : "); exit(0); } // 공유메모리를 사용하기 위해 프로세스메모리에 붙인다. shared_memory = shmat(shmid, (void *)0, 0); if (shared_memory == (void *)-1) { perror("shmat failed : "); exit(0); } shm_info = (SHM_INFOS *)shared_memory; while(1) { for(i=0 ;i < SHM_INFO_COUNT; i++){ snprintf(shm_info[i].str_ip,sizeof(shm_info[i].str_ip),"1.1.1.%d",i); shm_info[i].int_ip = 12891010 +i; shm_info[i].int_id = 128 + i; } } }
(3) shared Memory View 코드
#include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/shm.h> #include <string.h> #include <unistd.h> #include "share_memory.h" int main() { int shmid; int i; SHM_INFOS *shm_info= NULL; void *shared_memory = (void *)0; // 공유메모리 공간을 만든다. shmid = shmget((key_t)3836, sizeof(SHM_INFOS)*SHM_INFO_COUNT, 0666|IPC_CREAT); if (shmid == -1) { perror("shmget failed : "); exit(0); } shared_memory = shmat(shmid, (void *)0, 0666|IPC_CREAT); if (shared_memory == (void *)-1) { perror("shmat attach is failed : "); exit(0); } shm_info = (SHM_INFOS *)shared_memory; while(1) { for( i = 0; i < SHM_INFO_COUNT ; i++){ fprintf(stderr,"---------- [ %d ] shared info ---------\n",i); fprintf(stderr,"String IP[%s]\n",shm_info[i].str_ip); fprintf(stderr,"String IP[%u]\n",shm_info[i].int_ip); fprintf(stderr,"String IP[%u]\n",shm_info[i].int_id); } sleep(1); } }
(4) shared Memory Clear 코드
#include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/shm.h> #include <string.h> #include <unistd.h> #include "share_memory.h" int main() { int shmid; // 공유메모리 공간을 만든다. shmid = shmget((key_t)3836, sizeof(SHM_INFOS)*SHM_INFO_COUNT, 0666|IPC_CREAT); if (shmid == -1) { perror("shmget failed : "); exit(0); } if ( -1 == shmctl( shmid, IPC_RMID, 0)) { printf( "공유 메모리 제거 실패\n"); return -1; } else { printf( "공유 메모리 제거 성공\n"); } return 0; }
728x90
반응형
'프로그래밍 > ExampleCode.com' 카테고리의 다른 글
[semaphore] c++ semaphore example code (0) | 2021.07.10 |
---|---|
[IPC] pipe 예제 코드 (0) | 2018.09.20 |
[IPC] named pipe 예제 코드 (0) | 2018.09.20 |
[IPC] message queue 예제 코드 (0) | 2018.09.20 |
[IPC] 메모리 맵 mmap() 예제 코드 (0) | 2018.09.20 |