问题标签 [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.
c++ - 文件映射对象和文件对象可以互换使用吗?
假设我想为CreateFile函数生成一个包装函数
这个新函数不会在磁盘上生成真实文件,而是创建文件映射对象并返回新对象的句柄。
我查看了这个示例,创建命名共享内存,并尝试实现我的功能:
问题
这对我来说看起来不错,但是,当尝试使用返回HANDLE
的ReadFile函数时,我得到错误代码 6The handle is invalid.
问题
文件映射对象和文件对象可以互换使用吗?如果是这样,那么我的代码有什么问题?如果没有,知道如何实现这样的功能吗?
visual-c++ - 如何使用 Visual C++ 在内存中分段映射大型文本文件?
我在磁盘上有一个大小为 20GB 的大型纯文本文件。让我们将此文件命名为“MyFile.txt”。该文件只包含英文单词和一个值为“+++”的字符串。让我们将此字符串命名为 FlagString。从 MyFile.txt 的开头到 FlagString 有正确的英文单词。让我们将这部分文件称为字典。但是从 FlagString 之后的第一个单词到 MyFile.txt 的结尾,这些单词可能有拼写错误。让我们将这部分文件称为 CheckedSection。我必须阅读检查部分中的每个单词并验证该单词的拼写,以按照某种算法将其与 Dictionary 中的适当单词进行比较。如果 MyFile.txt 很大,我想使用 CreateFileMapping 和 MapViewOfFile 函数将文件映射到内存中。我的问题如下:
- MyFile.txt 很大,所以我想将它片段映射到内存中。让每个片段的大小为 1GB。请帮助我如何使用 CreateFileMapping 在内存中映射文件碎片。
- 当我使用碎片文件映射到内存时,如何将 FlagString 识别为 Dictionary 和 CheckedSection 之间的分隔符。MyFile.txt 中的 FlagString 在 1GB 部分边界上可能不是强制性的,但它可能在 1GB 部分内。文件映射到内存后,是否有任何文件光标用于标记文件中的位置?
- 我可以从 MyFile.txt 创建两个内存映射吗?Dictionary 的一个映射和 CheckedSection 的另一个映射。
- 每次完成 Dictionary 或 CheckedSection 的当前 1GB 部分的处理后,我必须调用 UnmapViewOfFile 和 CloseHandle 吗?
c++ - windows下如何正确使用共享内存
我对共享内存有点陌生,我正在寻找一个工作示例,我只能通过MSDN找到
在第一个进程中,我将共享内存声明如下:
在第二个过程中:
我知道一旦我完成了 mapView 的工作,我需要使用“ UnmapViewOfFile()
”来释放它。我的问题是具体在哪里?
- 父进程?
- 子进程
- 两个都?
如果两者都存在,操作系统是否会在地址完全释放之前保留一些引用计数?
来自 MSDN:
它还会减少相应物理页面的共享计数
这让我对我实际上应该做什么有点困惑。
c++ - CreateFileMapping,MapViewOfFile,处理泄漏 C++
背景:我正在尝试创建一个可由多个进程访问的内存映射文件。在下面的代码中,我只输入了与我目前必须使事情变得更简单的问题有关的代码。根据 msdn,我应该能够创建文件映射、映射文件视图并关闭从 CreateFileMapping 收到的句柄,并且 MapViewOfFile 将使我的 FileMap 保持活动状态。FileMap 应该仍然可以访问,直到我 UnmapViewOfFile。
MSDN: CreateFileMapping 函数
文件映射对象的映射视图维护对该对象的内部引用,并且文件映射对象在对它的所有引用都被释放之前不会关闭。因此,要完全关闭文件映射对象,应用程序必须通过调用 UnmapViewOfFile 取消映射文件映射对象的所有映射视图,并通过调用 CloseHandle 关闭文件映射对象句柄。这些函数可以按任何顺序调用。
问题:成功映射文件视图然后关闭 CreateFileMapping 接收到的句柄后,FileMap 不再存在(它应该仍然存在)并且我的 MemMapFileReader 能够创建一个错误为 0 的新映射。(当它应该接收错误 183 '已经存在')
不好的解决方案:不关闭句柄允许 MemMapFileReader 程序访问它,但会导致 MemMapFileCreator 中的句柄泄漏,因为在进程关闭之前,句柄永远不会关闭。
问题:我错过了什么或做错了什么?
MemMapFileCreator
MemMapFileReader
c - 为什么这个文件映射变量不被刷新到磁盘?
我最近意识到我的 C 技能有点生疏了,所以决定玩一下。不过,我只是遇到了一个奇怪的行为——我请求的文件映射内存似乎没有刷新变量ifs.free_space
。结果是如果你不注释掉这两//root
行,程序总是从ifs.free_space
等于零开始。但是,将其注释掉会导致计数器被保存。这里发生了什么事?
c - 使用 memcpy() 将一个文件的内容复制到另一个文件
我需要将 file1 上下文复制到 file2。这是我的文件 file1
文件2
所以我的resilt应该是file2
我必须使用mmap
andmemcpy
为此。所以在这里我做什么首先我打开两个文件
然后我映射我的文件
这是我的 memcpy
和我的主要
但在此之后,我的 file2 看起来像这样
为什么?怎么了?
python - 将内存文件传递给需要文件名的函数
我在 iOS 上使用 pythonista,虽然我希望这没关系。一些 lib 调用需要 json 文件的路径才能将内容呈现到表单/用户界面中。但是据我所知,没有 API 可以从变量中呈现 JSON 数据。我可以读入 JSON 数据并将其作为文件再次写出并使用该文件,一切正常。但是,我想要某种类型的虚拟文件名,它指向内存中可以传递给函数的文件对象。基本上,被调用的函数忽略了我提供的路径是内存文件句柄这一事实。我在这里搜索过,似乎这个主题没有很好地解决。或者我搜索不正确。我可以想象,这个功能非常好。
c - MapViewOfFile 偏移量 - 如何使用它
开发游戏(PT 中的“jogo”),服务器最多可以同时托管 5 个游戏,客户端将通过映射内存访问这些游戏。
所以这就是我所拥有的:
服务器:
客户:
我尝试创建“sizeof(sJogo)*MAX_JOGOS”的视图,然后增加指针+=sizeof(sJogo) * index; 但没有成功,所以现在我求助于你,你能帮我学习使用偏移量吗?
我一直在不断地搜索,并在 stackoverflow 上找到了一个很好的例子,但它是 C++,我无法适应它。
高阶 DWORD 偏移量是 sizeof(sJogo) 正确的吗?但我不知道粒度是什么或如何将其应用于低阶 DWORD ......
你能帮助我吗?谢谢你。
编辑:
下面的代码在 i = 1 (NULL) 时返回,我做错了什么?
编辑2:
解决了上面的问题,在这里找到了解决方案:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366548%28v=vs.85%29.aspx
我没有考虑偏移量的分配粒度,这导致 MapViewOfFile 在第二次尝试时返回 NULL。
上面的链接显示了一个关于如何将其应用于偏移量的清晰示例。
memory-management - 我如何知道linux进程的页面缓存大小
现在我可以通过 /proc/meminfo 知道系统的整体缓存页面,我是否可以进一步知道对于特定进程它消耗了多少页面缓存?我的第一个想法是在一个进程的 smaps 中添加所有 RSSes。还有什么建议吗?谢谢。