一、共享内存的原理
二、共享内存的函数
2.1、int shmget(key_t key,size_t size,int flags);
返回值:失败返回-1,成功返回共享内存的id。
size:表示要申请的共享内存的大小,一般是4k的整数倍。
flags:IPC_CREAT和IPC_EXCL一起使用,则创建一个新的关系内存,否则返回-1。IPC_CREAT单独使用时返回一个共享内存,有就直接返回,没有就创建。
2.2、void *shmat(int shmid);
shmat的作用是将申请的共享内存挂接在该进程的页表上,是的虚拟内存和物理内存向对应。
返回值:返回这块内存的虚拟地址。
2.3、int shmdt(const void*shmaddr);
shmdt的作用是去挂接,将这块共享内存从页表上剥离下来。
返回值:失败返回-1.
shmaddr:表示这块物理内存的虚拟地址。
2.4、int shmctl(int shmid,int cmd,const void* addr);
shmctl用来设置共享内存的属性。当cmd是IPC_RMID时可以用来删除一块共享内存。
三、命令
ipcs -m //查看系统中创建的共享内存的信息
ipcrm -m shmid //销毁创建的共享内存
四、共享内存中的结构体
ipc_perm这个结构体,在消息队列、信号量、共享内存中都是存在的。
struct ipc_perm {
key_t __key; /* Key supplied to shmget(2) */
uid_t uid; /* Effective UID of owner */
gid_t gid; /* Effective GID of owner */
uid_t cuid; /* Effective UID of creator */