- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我担心使用内存映射 IO 的危险,通过 CreateFileMapping ,在 FAT 文件系统上。具体场景是用户直接从 U 盘打开文档(是的,你尝试禁止他们这样做!)。
MSDN Managing Memory-Mapped Files article没有提及任何有关文件系统约束的内容。
更新
我没有任何真正的理由担心,但有一种模糊的感觉,我在某个时候读到过他们的问题(我的职业生涯超过 25 年,所以我的内存中有很多模糊的深度,所有回到 8 位微处理器的道路!)。他们是否应该得到支持的问题对我来说非常重要,所以我想问是否有人可以证实我的担忧。谢谢你让我安心。
最佳答案
内存映射文件是我最喜欢的功能之一。 绝对没有危险。它是极其优化的 Windows I/O 基本功能之一。如果启动 EXE 或间接加载 DLL,它会在内部实现为内存映射文件映射。
它受包括 FAT 在内的所有类型的文件系统支持。
顺便说一句atzz说网络驱动器上允许内存映射文件。我可以添加它不仅是允许的,而且严格建议对来自网络的文件使用内存映射文件。在这种情况下,I/O 操作将以非常好的方式进行缓存,而其他 (C/C++) I/O 则不会这样做。
如果您希望从 CD 或网络打开 EXE 时不会崩溃,可以在 header 中用一位标记程序可执行文件(链接器开关/SWAPRUN 参见 http://msdn.microsoft.com/en-us/library/chzz5ts6.aspx )。没有从 USB 内存棒打开文档的选项。
但是用户到底有什么问题呢?他们不使用“安全删除硬件”图标吗?然后他们必须学会这样做,就像他们必须学会不切换计算机电源,而是正确关闭计算机一样。
您能解释一下为什么您发现使用内存映射文件有危险吗?在什么情况下您会遇到问题,而使用其他 I/O 操作则没有这样的问题?
关于winapi - Win32 是否支持 FAT 文件系统上的内存映射文件 (CreateFileMapping)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227958/
我正在尝试使用 2 个同时运行的线程,并且都使用 FileMapping 功能通过不同的句柄将文件映射到内存中。问题是 MapViewOfFile 函数有时会将两个线程上的映射分配到相同的内存偏移量。
我想将文本写入文件。文本长度未知。所以想不出设置要使用的mapped memory的大小,就设置为100。然后,问题出现了!字符串写入成功,但剩余的100字节空间被NULL填满!!我怎样才能避免它??
使用 win32api,我希望下面的程序创建两个进程并创建一个文件映射。 (使用 C++) 我不知道我应该在 Handle CreateFileMapping(....我试过: PROCCESS_IN
我正在创建一个在不同应用程序之间共享内存的 DLL。 创建共享内存的代码如下所示: #define NAME_SIZE 4 HANDLE hSharedFile; create(char[NAME_S
我在将部分卷映射到内存时遇到问题。卷已成功打开,我可以从中读取,但 CreateFileMapping() 失败。 GetLastError() 返回 87,其中有 following意思是:“参数不
函数CreateFileMapping可用于在页面文件中分配空间(如果第一个参数是INVALID_HANDLE_VALUE)。分配的空间稍后可以内存映射到进程虚拟地址空间。 为什么我要这样做而不是仅使
我正在尝试按照 MSDN 上的教程进行操作:Creating Named Shared Memory . 不幸的是,我从 CreateFileMapping() 得到了 NULL。文件 shmfile
我有两个用 C 编写的窗口窗体应用程序,一个包含一个由两个整数组成的结构,另一个将使用 CreateFileMapping 接收它。 虽然没有直接关系,但我想准备好三个事件,这样每个进程都可以相互“对
只是想知道我是否正在像这样在 Windows 平台上创建共享内存阵列: HANDLE hFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAG
我希望使用命名共享内存实现IPC。 为此,其中一个步骤是使用 CreateFileMapping() 获取映射内存对象的句柄。 我完全按照 MSDN 网站的建议进行操作:http://msdn.mic
我正在开发一个针对桌面系统的应用程序,该系统可能只有 256MB RAM(Windows 2000 及更高版本)。在我的应用程序中,我有一个大文件 (>256MB),其中包含大约 160 字节/每个的
我是第一次尝试使用 CreateFileMapping,当我使用 GetLastError() 时出现此错误: ERROR_INVALID_HANDLE: The handle is invalid.
我按照设计在多个进程之间共享内存数据。 根据设计,应用程序需要多个内存文件,就像每个进程需要一个内存映射文件一样。但是有些进程需要更少的内存映射文件,比如 10KB 或更小。有些进程需要超过 1mb
请你帮我理解在本地/全局命名空间中是否可以有 2 个同名的共享内存对象?我知道,如果我们第一次创建了一个共享内存对象,那么我们需要调用 OpenFileMapping/MapViewOfFile 来打
亲爱的 friend ,我需要你的帮助。 我需要使用 MMF(内存映射文件)将 .bmp 文件发送到另一个进程(对话框)并在那里显示它但问题是图像以相反的颜色和上下颠倒的方式显示。 这是源代码: 在第
我正在使用 this MSDN link 上的教程实现一种将数据从一个进程传输到另一个进程的方法。尽管有人建议我 earlier question要使用 Pipe 方法,由于某些限制,我别无选择,只能
我正在使用共享内存映射进行进程间通信。该映射需要在 session 之间可见,因此我试图在全局命名空间中创建它。我知道正在运行的用户需要 SeCreateGlobalPrivilege 才能使其正常工
我正在尝试使用 CreateFileMapping 和 OpenFileMapping 在进程之间共享内存。这没有像我希望的那样工作 - OpenFileMapping 返回 null 并且 GetL
背景:我正在尝试创建一个可以被多个进程访问的内存映射文件。在下面的代码中,我只放入了与我目前必须使事情变得更简单的问题有关的代码。根据 msdn,我应该能够创建一个文件映射,映射文件的 View 并关
我担心使用内存映射 IO 的危险,通过 CreateFileMapping ,在 FAT 文件系统上。具体场景是用户直接从 U 盘打开文档(是的,你尝试禁止他们这样做!)。 MSDN Managing
我是一名优秀的程序员,十分优秀!