공유 메모리 정보 / 변경 shmctl()
OS/리눅스 & 유닉스 2012. 1. 12. 15:01shmctl() 함수는 공유 메모리에 대한 정보를 구하거나 변경 또는 제거합니다. 공유 메모리에 대한 자세한 내용은 shmget() 함수의 내용을 참고하여 주십시오.
헤더 | #include <sys/ipc.h> | |||||||
형태 | int shmctl(int shmid, int cmd, struct shmid_ds *buf); | |||||||
인수 |
| |||||||
반환 |
|
예제
예제를 위해 두 개의 프로세스를 만들겠습니다. counter.c 는 공유 메모리에 1초 마다 0부터 계속 증가하는 카운터 문자열을 공유 메모리에 넣으면 show_counter.c에서 공유 메모리를 화면에 출력하도록 하겠습니다.
#include <stdio.h> // printf() #include <unistd.h> // sleep() #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #define KEY_NUM 9527 #define MEM_SIZE 1024 int main( void) { int shm_id; void *shm_addr; struct shmid_ds shm_info; if ( -1 == ( shm_id = shmget( (key_t)KEY_NUM, MEM_SIZE, IPC_CREAT¦0666))) { printf( "공유 메모리 생성 실패\n"); return -1; } else { printf( "공유 메모리 생성 성공\n"); } if ( ( void *)-1 == ( shm_addr = shmat( shm_id, ( void *)0, 0))) { printf( "공유 메모리 첨부 실패\n"); return -1; } else { printf( "공유 메모리 첨부 성공\n"); } if ( -1 == shmctl( shm_id, IPC_STAT, &shm_info)) { printf( "공유 메모리 정보 구하기에 실패했습니다.\n"); return -1; } printf( "공유 메모리를 사용하는 프로세스의 개수 : %d\n", shm_info.shm_nattch); if ( -1 == shmdt( shm_addr)) { printf( "공유 메모리 분리 실패\n"); return -1; } else { printf( "공유 메모리 분리 성공\n"); } if ( -1 == shmctl( shm_id, IPC_RMID, 0)) { printf( "공유 메모리 제거 실패\n"); return -1; } else { printf( "공유 메모리 제거 성공\n"); } return 0; }
]$ gcc main.c
]$ ./a.out
공유 메모리 생성 성공 공유 메모리 첨부 성공 공유 메모리를 사용하는 프로세스의 개수 : 1 공유 메모리 분리 성공 공유 메모리 제거 성공 ]$
'OS > 리눅스 & 유닉스' 카테고리의 다른 글
프로세스 끼리의 통신 UDS (0) | 2012.01.19 |
---|---|
inittab (0) | 2012.01.19 |
vi 명령어 정리 (0) | 2012.01.12 |
vi 에디터 (커서, 화면 제어) (0) | 2012.01.11 |
vi 에디터 문자열 치환 (0) | 2012.01.09 |