linux下用mmap实现共享内存的时候open和shm_open有什么区别

wind19 2013-09-23 07:37:03
open一个文件 和 shm_open一个文件,然后用mmap把它映射入内存,两者之间有什么区别。 我只知道shm_open打开的文件在 /dev/shm下面,其他没看出来,性能上有区别吗?

另外,我看到说 只有调用munmap 或 msync的时候才会把数据写入到磁盘,但我没有调用这两个函数之前让程序sleep,然后用cat打开文件也能看到数据,就是说数据已经写入磁盘了。 那么这样性能不是很差吗。
...全文
2313 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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也会在适当时机写入硬盘。

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧