1.基本概念
共享内存是IPC机制中的一种。顾名思义,它允许两个不相关的进程访问同一段内存,这时传递数据的一种非常有效的方式。2.函数
1)创建打开共享内存
**创建/获取共享内存函数名:shmget
头文件:<sys/ipc.h><sys/shm.h>函数作用:创建或者获取共享内存并返回其描述符id
函数原型:int shmget(key_t key,size_t size,int shmflg);
返回值:成功返回创建或获取到的共享内存的描述符,失败返回-1
参数:key:共享内存的键值(利用键值去获取与之相关的共享内存)
size:共享内存的大小
shmflg:打开标志,**如果使用了IPC_CREAT则会新创建一块共享内存
2)映射共享内存(一旦创建了一块共享内存,进程就可以调用shmat将其连接到它的地址空间中)
**映射共享内存函数名:shmat
头文件:<sys/type.h> <sys/shm.h>
函数作用:把shmid指定的共享内存映射到进程的地址空间里
函数原型:void *shmat(int shmid,const void *shmaddr,int shmflg);
返回值:成功返回映射到进程空间之后的内存地址,失败的情况下返回-1
参数:shmid:用来指明要映射的共享内存的描述符
shmaddr:用来指定映射之后的地址,通常为空,为NULL时表明让Linux系统自动的选择映射地址
shmflg:标志
3)分离共享内存(当对共享存储段的操作已经结束时,则调用shmdt脱离该段)
**分离共享内存函数名:shmdt
头文件:<sys/type.h> <sys/shm.h>
函数作用:从调用进程的地址当中断掉与共享内存的联系
函数原型:int shmdt(const void *shmaddr);
返回值:成功返回0,失败返回-1
参数:shmaddr:用来指明要断开的共享内存的映射地址。
4)删除共享内存
**删除共享内存函数名:shmctl
头文件:<sys/ipc.h><sys/shm.h>
函数原型:int shmctl(int shmid,int cmd,struct shmid_ds*buf);
函数作用:控制共享内存
返回值:失败返回-1,成功:根据不同的操作返回不同的值
参数:shmid:用来指明控制的是哪块共享内存
cmd:决定执行什么样的控制操作(eg:IPC_RMID(表示删除))
buf:是获取Linux中描述共享内存的shmid_ds结构,基本不使用赋NULL
3.两个进程,write(用户通过键盘输入,放入共享内存)与read(从共享内存中将数据取出并打印出来)