创建共享内存
可以使用
shmget()
系统调用函数创建一个新的共享内存段。此函数接受三个参数:共享内存的键值(一个整数值,它唯一地标识共享内存段)、共享内存大小(以字节为单位)、和权限标志。
int shmid = shmget(key, size, IPC_CREAT | 0666)
连接共享内存
使用 shmat() 系统调用函数将当前进程附加到共享内存段上,返回共享内存段的起始地址。该函数接受两个参数:共享内存标识符和一个地址参数。如果地址参数为 NULL,则系统会自动选择一个可用的地址。
void *shmaddr = shmat(shmid, NULL, 0)
写入和读取共享内存
共享内存段现在可以在进程之间共享。进程可以读写共享内存中的数据,就像它们访问本地内存一样。这个过程通常需要一个互斥量或信号量,以避免进程之间的竞争条件。
std::string str = "Hello, shared memory!";
std::memcpy(shmaddr, str.c_str(), str.size());
char buffer[1024];
std::memcpy(buffer, shmaddr, 1024);
std::cout << buffer << std::endl;
断开共享内存连接
当进程不再需要使用共享内存时,它必须使用 shmdt() 系统调用函数将共享内存从其地址空间中分离。
shmdt(shmaddr);
删除共享内存
如果不再需要使用共享内存,则可以使用 shmctl() 系统调用函数删除共享内存段。
shmctl(shmid, IPC_RMID, NULL);
这些就是使用 C++ 实现共享内存的基本步骤。