共享内存
共享内存:顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。
不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
简单的用一张图来理解:
两个进程A,B,他们都有自己的内存空间,相互不影响,但共享内存就像是一个公共的内存区域,通过声明,访问,映射,就可以让两个进程通过它来相互通信。
主要思路:
1.创建共享内存,打开:shmget
2.映射共享内存,shmat
3.数据写入/读取
4.释放映射的地址或者共享内存shmdt,shmctl
我们就按照这个思路来编程,老样子,一个进程写东西,一个进程读东西。
read.c
write.c
用到的函数的相关信息也在上面。
可以看到我们创建了,也不能说创建,怎么说呢,就是找到了一块内存地址,让它的id=shmid,这样我们通过索引找到它,开辟一块字符串地址,利用shmat函数把共享内存地址映射到addr来,接着往这里面写入我们要写的话,再由read.c读出来。
来看看效果:
效果
可以看到,我们又成功实现了另外一种通信方式,共享内存。(管道(无名,命名),消息队列,共享内存)
(师上官可编程)