相关文章推荐
坏坏的拐杖  ·  matlab - Perfcurve ...·  2 年前    · 
失落的猴子  ·  vue + axios 通过Blob ...·  2 年前    · 
  • 创建共享内存
  • 可以使用 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++ 实现共享内存的基本步骤。

  •