1.共享内存是Linux操作系统中非常迅速的一种进程通信方式。创建一个指定大小的共享内存,然后将其他的进程与之关联起来,对共享内存进行需要完成操作,使用完成之后,可将共享内存从当前进程中脱离,最后再删除共享内存。
2.利用共享内存实现两个进程之间的通信,一个进程创建共享内存,并且写入数据;另一个进程,获取共享内存,并读取数据。代码如下:
/*创建共享内存,此部分往共享内存中写入数据*/
#include <stdio.h>
#include <sys/ipc.h> //ipc:inter-process communication进程通信
#include <sys/shm.h> //shm:share memory共享内存
#include <string.h>
int main()
{
//1.创建共享内存
int shmid = shmget(100,4096,IPC_CREAT | 0664);
printf("shmid = %d\n",shmid);
//2.将共享内存与当前进程进行关联
void * prt = shmat(shmid,NULL,0);
//3.写入数据
char *buf = "hello world";
memcpy(prt,buf,strlen(buf)+1); //strlen(buf) + 1是将buf中的结束符也拷贝到prt
printf("按任意键结束:\n");
getchar();
//4.解除关联
shmdt(prt);
//5.删除共享内存
shmctl(shmid,IPC_RMID,NULL);
return 0;
}
/*创建共享内存,此部分在共享内存中读取数据*/
#include <stdio.h>
#include <sys/ipc.h> //ipc:inter-process communication进程通信
#include <sys/shm.h> //shm:share memory共享内存
#include <string.h>
int main()
{
//1.获取共享内存
int shmid = shmget(100,0,IPC_CREAT);
printf("shmid = %d\n",shmid);
//2.将共享内存与当前进程进行关联
void * prt = shmat(shmid,NULL,0);
//3.读取数据
printf("%s\n",(char *)prt);
printf("按任意键结束:\n");
getchar();
//4.解除关联
shmdt(prt);
//5.删除共享内存
shmctl(shmid,IPC_RMID,NULL);
return 0;
}
3.运行结果:
4.总结:共享内存与其他的进程通信方式相比较,具有更快的响应速度。 同时,一个共享内存可与多个进程进行关联。与内存映射相比较,共享内存可直接创建,而内存映射需要磁盘文件(匿名内存映射不需要创建磁盘文件)。