问题标签 [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 投票
1 回答
506 浏览

winapi - Windows API:查找文件映射句柄的进程

我创建了一个具有预定义协议的 SSH 代理(类似于 PuTTY 的 pageant.exe):身份验证请求通过包含文件映射名称的 WM_COPYDATA 发送到代理窗口:

是否可以找出哪个进程(最终是进程名称)创建了特定的文件映射?

我可以在“filemap”上使用 GetSecurityInfo 来获取安全属性(SID、GID、...),但是如何获取进程本身呢?

重要说明:无法更改协议(例如,将有关发送者的信息添加到 WM_COPYDATA),因为这是所有类似 PuTTY 的应用程序使用的预定义协议!

0 投票
0 回答
54 浏览

java - 我无法内存映射大文件。地图失败。内存不足错误

这是我的代码:

以下是错误:

我正在尝试在 32 位系统上映射 1.5GB 的文件。

我认为nio应该解决这个问题。难道我做错了什么?

问候。

0 投票
0 回答
209 浏览

c# - .Net 文件映射的问题

有两个过程:

  1. Win32, C++ - 编写器
  2. .Net 4.5,C# - 阅读器

第一个进程为第二个进程创建缓冲区和共享。

  • (int)(buffer+0) - 直到你可以写为止。
  • (int)(buffer+4) - 直到你可以阅读。
  • ... - 块 [size_mess] [混乱]

记录循环,即当你到达缓冲区的末尾时,寻找开始。

在某些时候发生错误。

1 个进程等待读取数据。2 进程读取一个块,但读取旧数据(在前一次传递期间记录)。

尝试使用 MemoryMappedViewAccessor、MemoryMappedViewStream... 没有效果

.NET 可能导致延迟?

0 投票
1 回答
237 浏览

boost - 从 boost mapped_region 访问数据时出错

访问 mapped_region 数据时遇到了一些麻烦。

首先,我定义了一个结构:(用于股票报价......)

这是我想通过 bar 类型迭代访问的 sample.txt(我也尝试过二进制格式)文件

使用以下代码,我可以逐字符读取:

即,对于第一个数据,我会得到 8 9 。2 6、逐个字符使用add[i]。这可能是可怕的工作量。 所以我想转换:

这样我就可以使用以下方式访问数据:

例如,现在我想访问第二行的第三个数字,我只需要:

但是,结果确实是有线的:

事实上,如果我转换到 char 以外的任何时间,就会出现这样的错误......

问题:如何使用 myaddr-> 访问映射数据而不会出错?

谢谢

0 投票
1 回答
703 浏览

memory-management - 实现由磁盘文件 (dmalloc) 支持的 malloc

一般 malloc 和 mmap 说明

malloc(或任何分配函数)应该为应用程序分配内存。标准 glibc malloc 实现使用 sbrk() 系统调用来分配内存。分配给应用程序的内存不是通过磁盘备份的。只有当应用程序被扫出时,内存的内容才会被移动到磁盘(预先配置的交换磁盘)。

另一种分配内存的方法是使用 mmap。mmap 系统调用在虚拟地址空间中为调用进程创建映射。以下是根据 POSIX 标准的 mmap 函数声明。

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

/* 描述几个重要参数对 mmap 的含义 */

mmap 系统调用也可用于分配内存。通常这用于加载应用程序二进制文件或静态库。例如下面的 mmap 调用将分配内存,没有后备文件。

地址 = __mmap (0, 长度, PROT_READ|PROT_WRITE,MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);

标志 MAP_ANONYMOUS:映射没有任何文件支持;它的内容被初始化为零。

MAP_PRIVATE:创建私有写时复制映射。映射的更新对映射同一文件的其他进程不可见,并且不会传递到基础文件。

dmalloc dmalloc 是一个新的 API,它使用磁盘支持的文件分配内存,即没有 MAP_ANONYMOUS 和 MAP_PRIVATE 到 mmap。dmalloc 特别适用于 SSD,与 HDD 相比,SSD 的读/写延迟非常低。由于文件被映射到 RAM,dlmalloc 也将受益于高速 RAM。

备择方案

SSD 也可以配置为最高优先级的交换设备,但是这种方法受到 Linux 内核中 HDD 优化交换算法的影响。交换算法尝试在交换上聚集应用程序页面。当需要来自交换的数据时,它会读取完整的集群(预读)。如果应用程序正在执行随机 IO,则预读数据会导致不必要的 IO 写入磁盘。

问题:-

  1. 什么是“使用磁盘支持的文件分配内存,即没有 MAP_ANONYMOUS 和 MAP_PRIVATE 到 mmap。” 除了这两个,我应该使用哪个标志。
  2. 我如何创建分配给应用程序的内存的写入备份。
0 投票
1 回答
981 浏览

c - 两个进程之间的命名共享内存

我正在尝试使用文件映射在 C 中构建客户端/服务器,它仍然处于开发的早期阶段,但我在理解文件映射的工作原理时遇到了一些麻烦。

我在我的服务器上创建了一个结构的文件映射并将一些数据放在上面,然后我的客户端打开文件映射并读取数据。然后我的客户端写入数据供服务器读取,但服务器无法读取客户端数据,我不明白为什么,因为文件映射应该在两个进程之间同步。在这个阶段我仍然没有使用事件,但我认为不需要它们来工作(是吗?)

她是我的密码。

服务器:

客户:

谢谢!

0 投票
1 回答
315 浏览

visual-c++ - Message 如何通过将 LPTSTR 变量作为 Visual c++ 中的参数来读取值?

我尝试了一个来自 MSDN 的示例,该示例展示了如何使用 fileMapping 函数进行读写。我在此处粘贴代码供您从 MSDN 参考。该链接是http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx

如果你看到有这个语句 MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK); 它接受 pBuf(LPCTSTR 变量)并打印文件中输入的内容。我想检索 pBuf 指向的内容,或者有人可以指导消息框如何读取该值。我尝试使用 *pBuf 但它给了我一些位置。我只是被困在这里。请帮忙。

0 投票
5 回答
1059 浏览

c++ - 循环文件映射会降低性能

我有一个由文件映射内存支持的循环缓冲区(缓冲区的大小范围为 8GB-512GB)。

我正在以从头到尾的顺序方式写入(8 个实例)该内存,此时它会循环回到开头。

它工作正常,直到它需要执行两个文件映射并在内存中循环,此时 IO 性能完全被破坏并且无法恢复(即使在几分钟后)。我不太明白。

-

有任何想法吗?

目标系统:

  • 1 个 3TB 希捷 Constellation ES.3
  • 2x Xeon E5-2400(6 核,2.6Ghz)
  • 6x 8GB DDR3 1600Mhz ECC
  • 视窗服务器 2012
0 投票
0 回答
390 浏览

c - 如何使用 FileMapping CopyMemory 复制结构?

我有以下代码,在 CopyMemory 之后我的 pBuf 为空,它不包含来自 newCommand 的数据,或者当我想在该结构中添加一些东西时它不起作用......我做错了什么?

这是 CopyFiles 函数,我在其中发送 (*handlesInstance.pBuf) 并且我想在这里设置 pBuf 的值,以创建路径,稍后复制文件

0 投票
1 回答
1753 浏览

c - CreateFileMapping() 用于写入文件长度未知的文本

我想将文本写入文件。文本长度未知。所以我不知道要设置要使用的映射内存的大小,我将它设置为100。然后,问题出现了!字符串写入成功,但是剩余的100字节空间被NULL填充!!我怎样才能避免它???