2.28共享内存(1) 2.29共享内存(2)

文章介绍了如何在Linux环境下利用共享内存进行进程间通信,包括创建、关联、读写数据以及删除共享内存的步骤。示例代码展示了如何写入和读取共享内存中的数据,强调了同步问题的重要性。

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

2.28共享内存(1)

共享内存

在这里插入图片描述
新的问题:两个进程同时写数据,一个进程读数据,涉及进程同步问题。

共享内存使用步骤

在这里插入图片描述

共享内存操作函数

在这里插入图片描述
头文件

#include <sys/ipc.h>
#include <sys/shm.h>
  • shmget
    在这里插入图片描述
  • shmat

在这里插入图片描述

  • shmdt

在这里插入图片描述

  • shmctl

在这里插入图片描述

  • ftok

在这里插入图片描述

2.29共享内存(2)

共享内存相关问题

在这里插入图片描述

共享内存和内存映射的区别

在这里插入图片描述

通过共享内存实现进程间通信

共享内存写数据

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>

int main() {    

    // 1.创建一个共享内存
    int shmid = shmget(100, 4096, IPC_CREAT|0664);
    printf("shmid : %d\n", shmid);
    
    // 2.和当前进程进行关联
    void * ptr = shmat(shmid, NULL, 0);

    char * str = "helloworld";

    // 3.写数据
    memcpy(ptr, str, strlen(str) + 1);

    printf("按任意键继续\n");
    getchar();

    // 4.解除关联
    shmdt(ptr);

    // 5.删除共享内存
    shmctl(shmid, IPC_RMID, NULL);

    return 0;
}

共享内存读数据

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>

int main() {    

    // 1.获取一个共享内存
    int shmid = shmget(100, 0, IPC_CREAT);
    printf("shmid : %d\n", shmid);

    // 2.和当前进程进行关联
    void * ptr = shmat(shmid, NULL, 0);

    // 3.读数据
    printf("%s\n", (char *)ptr);
    
    printf("按任意键继续\n");
    getchar();

    // 4.解除关联
    shmdt(ptr);

    // 5.删除共享内存
    shmctl(shmid, IPC_RMID, NULL);

    return 0;
}

共享内存操作命令

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值