共享内存就是能被不同进程共同访问的一块内存。
函数shmget()用以创建一个共享内存,或者访问一个已存在的共享内存。原型如下:
#include <linux/shm.h>
int shmget(key_t key, size_t size, int shmflg);
- 参数key是由ftok()函数或得的键值。
- 参数size以字节为单位制定内存的大小。创建新的共享内存时,size必须大于0;如果访问一个现存的共享内存,则设置size为0。
- 参数shmflg是操作标志位。一般为IPC_CREATE。
通过shmat()函数将共享内存附加到需要使用共享内存的进程的地址空间。这样该进程与共享内存之间就建立了连接。shmat()函数调用成功就会返回一个指向共享内存区的指针,通过该指针就可以访问共享内存区了。shmat函数的原型为:
#include <linux/shm.h>
void * shmat(int shmid, const void *shmaddr, int shmflg);
- 参数shmid为shmget的返回值。
- 参数shmaddr一般设为NULL,表示由内核选择一个空闲的内存区。
当进程结束使用共享内存区时,要通过函数shmdt()断开与共享内存区的连接。一般来说,当一个进程终止时,它所附加的共享内存区都会自动脱落。其原型为:
#include <sys/shm.h>
int shmdt(const void * shmaddr);
函数shmctl()用以对共享内存区进行控制。
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
<