728x90
shm.c에서 shared memory를 생성하고 값을 넣는다.
client.c에서 shm에 있는 데이터를 출력한다.
shm.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <string.h>
typedef struct {
int a;
char b[10];
}Form;
// shm.c
int main()
{
int shmid;
void *shared_memory = (void *)0;
Form* form;
/* 공유메모리 공간을 만든다. */
shmid = shmget((key_t)1234, sizeof(form), 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);
}
form = (Form*)shared_memory; // 할당된 공유메모리에 데이터를 넣는다.
form->a = 3;
memcpy(form->b, "test", sizeof(form->b));
return 0;
}
client.c
typedef struct {
int a;
char b[10];
}Form;
//client.c
int main()
{
int shmid;
void *shared_memory = (void *)0;
Form *form;
/* 공유메모리 공간을 만든다. */
shmid = shmget((key_t)1234, sizeof(form), 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);
}
form = (Form*)shared_memory; // shm에 있는 데이터를 받아오기 위해서//
printf("shm data = %d, %s\n", form->a, form->b);
return 0;
}
그외
shmctl(shmid, IPC_RMID, 0) 으로 shm 제거 가능
ipcs -m -> shm 상태 체크 가능 , -m옵션없어도 보임
ipcrm -> shm 제거 가능
https://taesun1114.tistory.com/entry/%EA%B3%B5%EC%9C%A0%EB%A9%94%EB%AA%A8%EB%A6%AC-%ED%95%A8%EC%88%98-shmget-shmat-shmdt
https://www.joinc.co.kr/w/Site/system_programing/IPC/SharedMemory
728x90
'개발 업무(코딩)-개발자였을때 썼던..' 카테고리의 다른 글
c언어 리눅스(linux) 데몬프로세스(daemon) 간단 예제 (0) | 2023.01.08 |
---|---|
c언어 리눅스(linux) UDS 간단 예제 (0) | 2023.01.08 |
c언어 리눅스(linux) fork를 이용한 프로세스 생성 예제 (0) | 2023.01.08 |
c언어 리눅스(linux) TCP/IP 예제 (0) | 2023.01.08 |
쉘 스크립트(shell script) - 업뎃ing (0) | 2023.01.08 |