社区
Linux/Unix社区
帖子详情
linux下用mmap实现共享内存的时候open和shm_open有什么区别
wind19
2013-09-23 07:37:03
open一个文件 和 shm_open一个文件,然后用mmap把它映射入内存,两者之间有什么区别。 我只知道shm_open打开的文件在 /dev/shm下面,其他没看出来,性能上有区别吗?
另外,我看到说 只有调用munmap 或 msync的时候才会把数据写入到磁盘,但我没有调用这两个函数之前让程序sleep,然后用cat打开文件也能看到数据,就是说数据已经写入磁盘了。 那么这样性能不是很差吗。
...全文
2436
7
打赏
收藏
linux下用mmap实现共享内存的时候open和shm_open有什么区别
open一个文件 和 shm_open一个文件,然后用mmap把它映射入内存,两者之间有什么区别。 我只知道shm_open打开的文件在 /dev/shm下面,其他没看出来,性能上有区别吗? 另外,我看到说 只有调用munmap 或 msync的时候才会把数据写入到磁盘,但我没有调用这两个函数之前让程序sleep,然后用cat打开文件也能看到数据,就是说数据已经写入磁盘了。 那么这样性能不是很差吗。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
YouCompleteMe
2014-10-11
打赏
举报
回复
/dev/shm 目录下的tmpfs文件系统是基于内存的文件系统
sjjwan
2014-05-04
打赏
举报
回复
2
对于mmap函数而言,shm_open与open函数打开一个文件没有什么区别,只是shm_open函数是在/dev/shm目录上生成一个文件,而且会校验该目录下是不是挂载了tmpfs文件系统,如果不是也不能正常打开的。所以一般还是用shm_open函数更规范一些,因为这个文件存在tmpfs文件系统下,在不用的情况系统会自动删除掉。
wind19
2013-09-26
打赏
举报
回复
版主啊,鸡冻一下先。 但是我没有设置share,在程序退出之后,还是可以用用cat看到文件内容。 还有,用shm_open 和 open打开一个文件,对于共享内存有区别吗?
qiyu1988
2013-09-24
打赏
举报
回复
shm_open内存共享主要功能还是作为一种便捷的ipc通信机制
qq120848369
2013-09-24
打赏
举报
回复
不设置share就不会写盘。
wind19
2013-09-24
打赏
举报
回复
open打开的不是也可以进行内存共享吗? 因为 mmap也会把它映射进内存。 另外,有没有什么办法让mmap不写磁盘,即便程序退出也不写。
Carl_CCC
2013-09-23
打赏
举报
回复
shm_open主要打开一个共享内存用户进程间交换大量数据 mmap可以用于交换数据,也可以映射文件,很方便的。 linux操作系统写文件没你想象那么简单,有缓存机制的,你cat文件的内容不一定是来自硬盘。 而mmap除了msync,munmap也会在适当时机写入硬盘。
linux
下通过
共享内存
和
mmap
实现
进程间通讯
本文详细介绍了
Linux
下如何使用
mmap
进行内存映射,并结合
shm
_
open
探讨了
共享内存
的创建和使用。通过实例展示了如何
实现
进程间通信,强调了
共享内存
不自带同步机制,需要借助信号量解决。文章还提到了
shm
_
open
与
open
的
区别
,以及在实践中可能遇到的问题和解决方法。
C++面试题16_
共享内存
(
shm
)和
mmap
的
区别
?
本文深入剖析
Linux
下
共享内存
(
shm
)与
mmap
的本质差异:
shm
以内存为中心,专用于进程间高速通信,不依赖真实文件,生命周期独立;
mmap
以文件为中心,本质是文件到虚拟内存的映射,支持持久化和大文件高效IO。二者在数据来源、文件关联性、持久化机制及使用目标上存在根本
区别
,而POSIX
shm
实际常通过
shm
_
open
+
mmap
实现
,表明二者在内核层面高度统一。
Linux
进程间通信之
共享内存
(POSIX)
实现
篇
本文基于
Linux
2.6.12内核,深入分析POSIX
共享内存
的
实现
机制。其通过
shm
em文件系统在/dev/
shm
目录下创建临时文件,利用VFS层和内存映射技术
实现
进程间高效
共享内存
。核心涉及
shm
_
open
、
mmap
等系统调用,关键数据结构包括
shm
em_inode_info、vm_area_struct等,并详细阐述了页按需分配、并发控制及与System V
共享内存
的主要
区别
。
共享内存
的特殊文件系统
本文深入探讨了
Linux
系统中
共享内存
的创建、映射以及内存页面的寻址机制,详细解释了
shm
_
open
、
mmap
、
shm
get、
shm
at等关键函数的作用与原理。此外,文章还对比了
共享内存
与普通文件映射的
区别
,并阐述了
mmap
系统调用在
共享内存
通信中的应用。最后,介绍了tmpfs和
shm
em作为
共享内存
的两种
实现
方式,以及它们在内核中的
实现
细节。
Linux
共享内存
本文系统讲解
Linux
下两种
共享内存
实现
机制:System V(
shm
get/
shm
at/
shm
dt/
shm
ctl)和POSIX(
shm
_
open
/
mmap
)。涵盖
共享内存
定义、API函数功能与参数说明、进程附着/分离/销毁机制差异、权限控制、安全性注意事项(需配合信号量)、查看方法(ipcs命令)及完整代码实战。重点剖析
shm
dt与
shm
ctl(IPC_RMID)的本质
区别
,强调
共享内存
生命周期管理。
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章