共享内存是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数据处理过程中内存的消耗。
共享内存是将用户空间的虚拟内存映射到内核空间的物理内存。(不需要拷贝write,read)
共享内存头文件:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
共享内存的使用包括如下步骤
1、创建/打开共享内存。
//创建并打开共享内存
key_t key = ftok(".", 10);//找到write的key.
if(key < 0)
{
perror("ftok error!");
return -1;
}
printf("key = %d\n", key);
int shmId = shmget(key, 100, 0666 | IPC_CREAT);
if(shmId < 0)
{
perror("shmget error!");
return -1;
}