目录
一,共享内存原理
还是和上一节一样,俩个进程要通信,那么他俩就需要看到同一块资源,如图所示就是他的原理:
所以我们可以知道共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据
二,创建共享内存
四个函数
1,shmget创建共享内存
key需要用户自己提供:
需要用户调用ftok函数来给出:
这里使用和上一节的命名管道差不多,提供相同的路径,和一个int值,生成一个定值key_t,这样俩个进程只要是提供的路径相同,数字相同,就会得到同一个key_t,参考命名管道。
size:创建的大小:
shmflg:创建的方法和权限
IPC_CREAT:没有则创建,有了就返回创建好的。
IPC_EXCL:有了则出错返回,这个不单独使用,和IPC_CREAT,配合,用来保证创建的共享内存是新创建的,而不是以及创建好了。
这个函数的返回值就标定了一块共享内存,并且是唯一标定的。
2,shmat挂接共享内存
shmid:shmget的返回值
shnadder:从哪里挂接,我们一般不知道因该是特殊用途,设置为nullptr就好了,系统自动选择。
shmflag:传0使用默认读写就行了,
shmat的返回值是void* ,参考malloc开出的空间,差不多一样,就当malloc开出的空间那样使用就好了。