共享内存 C++

共享内存是一种高效的进程间通信方式,允许不同进程直接访问同一块物理内存。本文通过示例代码介绍了如何使用shmget创建共享内存,shmat进行映射,以及shmctl删除共享内存。在示例中,进程写入和读取共享内存区域的‘a’字符,展示了其基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

共享内存是一种进程间通信的方式,它允许多个进程访问同一个物理内存区域,从而可以实现数据的共享。在共享内存机制中,创建并维护一个共享内存区域的进程被称为共享内存的拥有者。其他进程可以通过映射该共享内存区域到自己的地址空间中来访问共享内存中的数据,从而实现进程间的通信和数据共享。

 

共享内存具有以下优点:

  1. 高效性:共享内存的访问速度非常快,因为它不需要进行数据复制和传输,而是直接在内存中进行访问。

  2. 灵活性:共享内存可用于实现不同类型的进程间通信,包括线程间通信和不同计算机之间的通信。

  3. 易于使用:共享内存是一个非常通用的通信机制,因为它可以使用标准的共享内存API在不同的操作系统和编程语言中实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    
    #define SHM_SIZE 1024
    
    int main(int argc, char **argv) {
        int shmid;
        key_t key;
        char *shm, *s;
    
        /* 生成唯一的键值 */
        key = ftok(".", 'm');
    
        /* 创建共享内存区 */
        shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666);
        if (shmid < 0) {
            perror("shmget");
            exit(1);
        }
    
        /* 将共享内存区映射到当前进程空间 */
        shm = (char *) shmat(shmid, NULL, 0);
    
        /* 在共享内存区中写入数据 */
        s = shm;
        for (int i = 0; i < SHM_SIZE; i++) {
            *s++ = 'a';
        }
    
        /* 等待另一个进程读取数据 */
        sleep(5);
    
        /* 从共享内存区中读取数据 */
        s = shm;
        for (int i = 0; i < SHM_SIZE; i++) {
            putchar(*s++);
        }
    
        /* 删除共享内存区 */
        shmctl(shmid, IPC_RMID, NULL);
    
        return 0;
    }
     
    

    (14条消息) 进程间通信——共享内存(Shared Memory)_victory_523的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值