Linux程序设计之共享内存

1.共享内存是Linux操作系统中非常迅速的一种进程通信方式。创建一个指定大小的共享内存,然后将其他的进程与之关联起来,对共享内存进行需要完成操作,使用完成之后,可将共享内存从当前进程中脱离,最后再删除共享内存。

2.利用共享内存实现两个进程之间的通信,一个进程创建共享内存,并且写入数据;另一个进程,获取共享内存,并读取数据。代码如下:

/*创建共享内存,此部分往共享内存中写入数据*/

#include <stdio.h>
#include <sys/ipc.h>    //ipc:inter-process communication进程通信
#include <sys/shm.h>    //shm:share memory共享内存
#include <string.h>

int main()
{
    //1.创建共享内存
    int shmid = shmget(100,4096,IPC_CREAT | 0664);
    printf("shmid = %d\n",shmid);

    //2.将共享内存与当前进程进行关联
    void * prt = shmat(shmid,NULL,0);

    //3.写入数据
    char *buf = "hello world";
    memcpy(prt,buf,strlen(buf)+1);  //strlen(buf) + 1是将buf中的结束符也拷贝到prt

    printf("按任意键结束:\n");
    getchar();

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

    //5.删除共享内存
    shmctl(shmid,IPC_RMID,NULL);
    
    return 0;
}
/*创建共享内存,此部分在共享内存中读取数据*/

#include <stdio.h>
#include <sys/ipc.h>    //ipc:inter-process communication进程通信
#include <sys/shm.h>    //shm:share memory共享内存
#include <string.h>

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

    //2.将共享内存与当前进程进行关联
    void * prt = shmat(shmid,NULL,0);

    //3.读取数据
    printf("%s\n",(char *)prt);

    printf("按任意键结束:\n");
    getchar();

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

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

3.运行结果:

4.总结:共享内存与其他的进程通信方式相比较,具有更快的响应速度。 同时,一个共享内存可与多个进程进行关联。与内存映射相比较,共享内存可直接创建,而内存映射需要磁盘文件(匿名内存映射不需要创建磁盘文件)。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值