问题标签 [file-mapping]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1636 浏览

c++ - 使用 FileMapping 传递 _EXCEPTION_POINTERS * 时遇到问题

我想做一个进程外异常处理程序,并且我创建了一个看门狗进程,它在子进程引发异常时进行专门的异常处理。我已经通过 events 成功调用了 watchdog 进程。我面临的问题是尝试将异常信息指针传递给另一个进程。

我在这里登陆了传递一个指向由 exec() 生成的进程的指针,并知道在共享内存中传递指针有这个问题:

“如果你使用共享内存,你不能传递指针。指针将包含虚拟地址,这与一个进程不同。你必须交换偏移值,基于共享内存区域的开始。

如果您不使用共享内存,则无法交换任何类型的指针:其他进程将无法访问您进程的内存。”

现在我该如何克服呢?

过程1:

(例如)过程 2:

会崩溃。我理解这是因为虚拟地址是特定于进程的。但是在这种情况下如何将异常信息传递给不同的进程并编写一个小型转储?

PS:我什至尝试单独传递 PEXCEPTION_RECORD 结构,但不起作用。

0 投票
4 回答
1648 浏览

winapi - 具有进程间(非)同步多线程访问的 CreateFileMapping 和 MapViewOfFile?

我使用共享内存区域将 som 数据获取到第二个进程。

第一个过程使用和。CreateFileMapping(INVALID_HANDLE_VALUE, ..., PAGE_READWRITE, ...)MapViewOfFile( ... FILE_MAP_WRITE)

第二个过程使用和。OpenFileMapping(FILE_MAP_WRITE, ...)MapViewOfFile( ... FILE_MAP_WRITE)

文档状态:

如果文件映射对象的多个视图在指定时间包含相同的数据,则它们是一致的。如果文件视图派生自同一文件支持的任何文件映射对象,则会发生这种情况。(...)

除了一个重要的例外,从由同一文件支持的任何文件映射对象派生的文件视图在特定时间是连贯的或相同的。对于进程内的视图和由不同进程映射的视图,一致性得到保证。

异常与远程文件有关。(...)

由于我只是按原样使用共享内存(由分页文件支持),我会假设进程之间需要一些同步才能看到另一个进程写入的内存的一致视图。但是我不确定究竟需要什么同步。

我目前的模式(简化)是这样的:

这是否足够同步,即使对于共享内存也是如此?

两个进程之间通常需要什么同步?

请注意,在单个进程内部,对的调用SetEvent肯定会构成一个完整的内存屏障,但我并不完全清楚这是否适用于跨进程的共享内存。

0 投票
1 回答
343 浏览

c++ - 文件映射打开(Win​​dows)

如何在 Windows 上正确打开/使用文件映射,并能够在没有文件映射的情况下从另一个进程写入文件;

例如进程A写入大日志文件,它打开文件,将新数据写入末尾,或者用新数据重写它。

进程 B 并行打开此文件作为文件映射,并不时读取内存页面以进行更新,而无需关闭文件映射。

请不要问我为什么要做上面解释的逻辑。我需要知道可以做到吗?

0 投票
1 回答
45 浏览

winapi - FileMapped 写访问

我尝试在文件作为从另一个进程映射的文件打开时写入文件,但它失败了。

请看代码片段:

此时文件已关闭(它是句柄)但映射到地址空间。我在记事本++中打开这个文件,修改它并尝试保存,但我看到消息:

“请检查此文件是否在另一个程序中打开。”

所以我不能从另一个进程重写它,好像它的写入权限被锁定了。

如果我未映射文件,例如:

然后我无法再次重写文件。

我做错了什么?

0 投票
1 回答
1682 浏览

c++ - 复制内存块

我只想复制 4 个字节:(“value1”整数变量到我的内存块中)。

当我尝试编译时,出现此错误:

错误 1 ​​错误 C2036:“PVOID”:未知大小

0 投票
0 回答
61 浏览

c++ - C++ MapVirtualFileEx - 创建多个地图以加快访问速度

我正在使用 MapVirtualFile 快速访问文件中的数据。但是,这太慢了。我想这是因为文件很大(300 mb),我需要从不同的位置读取(例如从文件的开头,然后从文件的结尾)。

我想知道是否有人有从文件创建多个地图的经验。这可能会加快一切吗?

例如,我会创建 4 个地图。一个映射指向文件的第 1 节,第二个映射指向文件的第 2 节,第三个映射指向文件的第 3 节,依此类推。

这有可能吗,它会使读取数据的速度更快吗?

我的代码很大,在我花 2 天时间发现它并不能解决我的问题之前,我更愿意考虑一下这个问题。

谢谢你。

0 投票
1 回答
3102 浏览

c++ - 信号量上的 WaitForSingleObject 不等待,立即返回

我正在尝试使用 Windows 文件映射并使用信号量来制作一个简单的客户端-服务器程序。客户端向服务器发送 2 个号码,服务器计算 nr1+nr2 和 nr1 * nr2。我尝试了一些东西,但它甚至不适用于 1 个客户,我希望它适用于更多客户。这是代码:

服务器:

客户端:

我到底做错了什么?我应该如何使用信号量?

0 投票
1 回答
10451 浏览

c++ - 如何在 C++ 中创建文件映射?

我正在编写一个游戏预加载器(一个在启动程序之前将某些文件 [地图] 加载到缓存中的简单程序。有人告诉我使用 CreateFileMapping,但我仍然不确定它是将其加载到物理内存还是虚拟内存中......

无论如何,我会将需要加载的文件放在哪里?

这是我的代码(实际上是由其他人在堆栈溢出时告诉我使用它的)

0 投票
1 回答
387 浏览

delphi - 使用 FileMapping 创建文件

下午好。我使用 FileMapping 来读取文件。而现在我需要使用这种技术创建一个文件,但我不知道文件的大小。如果大小未知,如何使用 FileMappimg 创建文件?

0 投票
1 回答
437 浏览

c++ - 从函数返回 boost::interprocess 内存映射文件?

如何将此代码放入函数中,以便传递文件路径并将文件映射的字节返回到 char 数组?每当我尝试过,一旦功能完成,我就永远无法读取内容?