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 |