共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。
由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。
任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。
共享内存是 Linux下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
system("ipcs -m");
key_t key;
if ((key_t)-1 == (key = ftok(".",'a')))
{
perror("ftok");
exit(-1);
}
int shmid;
/*创建共享内存*/
if (-1 == (shmid = shmget(key, 100, IPC_CREAT|0666)))
{
perror("shmget");
exit(-1);
}
system("ipcs -m");
/*映射共享内存到用户空间*/
void *ptr;
if ((void *)-1 == (ptr = shmat(shmid, NULL, 0)))
{
perror("shmat");
exit(-1);
}
strcpy((char *)ptr, "hello world!");
system("ipcs -m");
return 0;
}