(1)源代碼
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#define BUFFER_SIZE 1024
int shmfd; //文件描述符
char* share_mem; //指向共享內存的起始地址
const char* shm_name = "/my_shm"; //文件名
shmfd = shm_open(shm_name, O_CREAT | O_RDWR, 0666); //在/dev/shm/目錄下創建or打開以shm_name爲名的文件
assert(shmfd != -1);
int ret = ftruncate(shmfd, BUFFER_SIZE); //調整文件大小
assert(ret != -1);
//在進程的虛擬地址空間中尋找一塊連續區域,將shmfd指向的文件映射到此區域
share_mem = (char*)mmap(NULL, BUFFER_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);
assert(share_mem != MAP_FAILED);
close(shmfd); //無需文件描述符,使用share_mem即可訪問共享內存
/*
使用共享內存
...
...
*/
munmap((void*)share_mem, BUFFER_SIZE); //解除映射關係
shm_unlink(shm_name); //將此文件標記爲待刪除,當所有使用該文件的進程都解除映射關係後,將此文件從物理內存中刪除
(2)建立映射示意圖