Linux进程间通信③:IPC-共享内存

本文详细介绍了Linux下的共享内存机制,包括如何通过ftok生成IPC键值、shmget创建和获取共享内存、shmat挂载共享内存以及删除共享内存。通过示例展示了服务器端和客户端如何实现信息的快速交换,强调了共享内存作为最快IPC通信方式的特点,以及其不自带同步互斥机制的特性。

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

共享内存是基于虚拟内存的机制,在进程的地址空间中,共享区域的虚拟页通过内核中的页表映射到实际的物理页中,当多个进程都映射到同一块物理页,那么它们访问的就是同一片物理内存,即共享内存。

此时基于同一片内存,进程间进行信息传输的速度将非常快,每个进程相当于访问自己地址空间内的内存数据

 

 

关键函数:

key_t ftok(const char* pathname,int proj_id)

该函数通过将一个Linux目录名和一个项目ID生成唯一的一个IPC键值。目录必须存在,并且目录不变时,不同进程之间生成的IPC键值是不变的,由此不同进程基于该函数获得对IPC资源的访问指针。

int shmget(key_t key,size_t size,int shmflg)
  • key:该函数传入所要访问IPC资源的key  ,
  • size:指定申请的共享内存大小(Linux中页的大小通常为4k :4096个字节 整数倍的申请可提高存取效率)
  • shmflg:创建IPC资源为IPC_CRETE
  • 返回值:若创建成功或者已有该IPC资源  返回一个IPC资源标识符(该标识符每个进程不同,仅仅在本进程中使用)
void* shmat(int shmid,const void* shmaddr,int shmflg)
  • shmid:即通过shmget返回的共享内存id
  • shmaddr:=0 则默认由内核挂载到共享内存的第一个可用位置上
  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值