Ada 2 cara untuk menggunakan shared memory, yaitu :
- Menggunakan mmap()
- Menggunakan shmget() -> lebih populer
Langkah - langkah membuat shared memory :
- Membuat segment di memory dengan shmget()
- Mendaftarkan (attach) segment ke data space dari proses dengan shmat()
- Tulis/Baca dari memori
- Detach segment dari data space dari proses dengan shmdt()
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);
shmflg bisa diisi dengan : IPC_CREATE, IPC_EXCL, permission
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
Parameter :
shmid → ID dari shared memory
shmaddr → Lokasi shared memory di main memory
jika NULL akan dicarikan lokasi pada memory yang ingin ditempati
Return :
Pointer ke lokasi shared memory
#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr);
Parameter :
shmaddr → pointer ke lokasi shared memory
Return :
0 → sukses
(void *) -1 → error
4. shmctl();
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
IPC_STAT : mengambil informasi ttg shared memory segment
IPC_SET : mengubah informasi ttg shared memory segment
IPC_RMID : menandai suatu segment untuk dibuang ketika semua process yang menggunakannya sudah melepasnya
SHM_LOCK : Lock suatu segment, membuatnya tidak bisa di-swap
SHM_UNLOCK : Unlock suatu segment
Program Tambahan untuk IPC
- ipcs
Menyediakan informasi yang berkaitan dengan IPC yang sedang digunakan (message queue, shared memory, semaphore) - ipcrm
Menghapus IPC tertentu (message queue, shared memory, semaphore)