共享内存简单入门

时间:2022-07-04 09:04:46

共享内存是UNIX下多进程通信的一种方式,可以被不同的CPU访问。多个程序间也可以通过共享内存传递信息
共享内存SHELL操作
ipcs用于查看共享内存信息
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x0143b800 196608     oracle    640        239075328  50                  

ipcrm用于删除共享内存信息,如要删除以上共享内存,可使用以下命令
ipcrm -m 0x0143b800
ipcrm -s用于删除信号量

共享内存函数操作
int shmget( key_t key, size_t size, int flag );
shmget函数用于创建或者打开一块共享内存,key用于标识该内存,是唯一的,由于共享内存是存在于内核的。
所以分配内存时,系统会分配可以满足SIZE长的页数,最后一个页的部分剩余内存是不可用。

int shmctl( int shm_id, int cmd, struct shmid_ds *buf );
shmctl用于共享内存的操作,包括锁定共享内存,解锁共享内存,获取shmid_ds结构,给shmid_ds赋值等。

void *shmat( int shm_id, const void *addr, int flag );
使用函数shmat将一个已经存在的共享内存段加载到本进程空间

int shmdt( void *addr);
shmdt将指定的共享内存段从当前进程空间中卸载出去。

在使用共享内存时两个进程同时读写该共享内存,必须注意协调使用,比如使用同步或者互斥手段,共享内存中一条信息的结尾都是以字符串的默认结束符,这点必须注意。