当前位置:  技术问答>linux和unix

mmap函数建立文件的内存映射后,删除文件,能正常读取内容吗?

    来源: 互联网  发布时间:2016-11-11

    本文导语:  运行的结果是,能正常读写,但不清楚为什么!有两种可能: 1  内存映射对应一块硬盘空间,文件删除后,内容还在,所以能读取。但如果别的进程把这块空间占了,就危险了。    这样,总归有出错的可能性。 2...

运行的结果是,能正常读写,但不清楚为什么!有两种可能:
1  内存映射对应一块硬盘空间,文件删除后,内容还在,所以能读取。但如果别的进程把这块空间占了,就危险了。
   这样,总归有出错的可能性。
2  内存映射对应一块硬盘空间,只要映射不解除,即使文件删除,硬盘上的那块空间还处于保护状态,这样算是安全的。

比如
    void* addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fildes, 0);
指针addr 没有释放之前,原来硬盘上的那块区域能被别的进程写入吗?纠结中。

|
文件删除之后,并没有真正删除,直到所有访问这个文件的进程关闭对应的描述符为止

|
在文件系统中每一个inode都有一个引用值, 所谓的删除并不是真正的从文件系统中删除,只是把引用值减一,知道最后一个使用文件的进程结束后,才真正的把这个文件删除。

|
apue上一句话:as long as some process has the file open, its contents will not be deleted

删除文件时,只要有进程正打开着那个文件,其内容不会被删除
这时内核应该采用某种机制防止硬盘上的这块数据被其它进程使用

内存映射时,你是不是没有关闭那个文件描述符,试试关闭描述符,再删除,看看结果..

|
从你的需求来看,内存映射与文件保护关系不大啊
你解密之后,删除之前  --如果这时有人读文件,盗用成功

你也可以这样,不用内存映射,直接分配一个局部变量,读入文件全部内容,然后删除文件。
与你的内存映射效果差不多吧..

|
怀疑内存映射机制隐式的打开了文件

可以试验一下:
先打印一下当前的fildes的值;
在mmap()内存映射之后,munmap()之前,再随便打开一个另外一个文件,记录此时的文件描述符的值,然后关闭;
在munmap()之后,再随便打开一个文件,记录此时的文件描述符的值;

对比一下两个值是否相等

|
你所谓的 “读写” 都是针对内存的,这里相当于把文件加载到了内存。
在linux下执行可执行程序时照样可以删掉这些文件。一个道理。

|
如果要搞明白这个问题,需要深入了解内存映射的机制

在了解内存映射的机制之前,保险的做法:
在munmap()之前,不要close()文件,这样即使删除了硬盘上的文件,其内容也不会被删除。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下mmap函数的问题
  • 请问LDD3中的 simple_nopage_mmap 函数的一些问题
  • 谁有关于函数mmap()方面的用法实例或者文章?
  • mmap函数如何使用?
  • 因为mmap函数返回值是void*类型,是否可以将其强制转换成char*类型,按字符串操作,然后将修改重新写入内存映像即可????
  • mmap()函数使用问题
  • 我调用mmap函数有问题,想用erron这个全局变量,可怎么用不起啊。帮我看看吧。拜托给位了。
  • 关于mmap的问题
  • 问个mmap和其锁的问题
  • mmap机制的问题
  • mmap和malloc的区别是什么?
  • mmap使用中的困惑,,,在线等待,,请帮忙,谢谢!
  • 如何写mmap程序
  • mmap共享内存问题?
  • 嵌入式LINUX mmap 出错
  • 请问溢出mmap()分配的共享空间要怎么办??
  • mmap()在内存小时的性能
  • 关于2.4.2的mmap()
  • mmap问题!
  • 请教用过mmap的大虾
  • 请问如何查看一个进程中 brk和mmap各自分配的内存空间的大小
  • 高分求助:bigphysareas和mmap的操作在两个不同的版本返回的结果不同
  • 有关mmap()的一个问题
  • ***对FRAMEBUFFER中用到的MMAP的严重质疑****
  • mmap出错,不知是什么原因.
  • mmap后能用strtok或者srtok_r吗?
  • 关于mmap的一个问题(一) :(user space)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3