在卸载的文件上执行mmap()后避免崩溃
发布时间:2020-12-15 21:46:27 所属栏目:安全 来源:网络整理
导读:我正在对可以卸载的文件执行mmap()(该文件位于用户可以随时删除的USB设备上),如果文件已卸载,我的应用程序崩溃然后我尝试访问任何元素在缓冲区. 对此有何解决方案? 解决方法 首先,我想说这应该作为一个很好的论据,不要不必要地使用mmap作为“优化读
我正在对可以卸载的文件执行mmap()(该文件位于用户可以随时删除的USB设备上),如果文件已卸载,我的应用程序崩溃然后我尝试访问任何元素在缓冲区.
对此有何解决方案? 解决方法
首先,我想说这应该作为一个很好的论据,不要不必要地使用mmap作为“优化读取”或类似的.除了设备删除之外,其他进程的文件截断等问题都可能导致访问SIGBUS的错误.
如果确实需要使用mmap,可以为SIGBUS安装信号处理程序.它的任务基本上应该是: >设置一个全局(或线程本地,如果您的程序是多线程的)标志SIGBUS发生,因此错误代码可以知道. 另一种方法是在访问映射之前设置全局(或线程局部)jmp_buf,并让信号处理程序简单地调用longjmp. 请注意,mmap和longjmp都不是异步信号安全的,但所讨论的SIGBUS不是异步信号(尽管如果故障访问发生在非同步信号安全库函数内,例如sscanf,它应该被视为一个) ).只要它是你自己的代码,而不是库函数,访问地图,你应该是安全的.并且mmap在大多数/所有实际实现中都是异步信号安全的,所以即使它不是正式的,你也应该在实践中使用第一个解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |