gpt4 book ai didi

c++ - 没有 ftruncate 和物理文件的 Linux 上的共享内存?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:29 26 4
gpt4 key购买 nike

当我想在 linux 中映射一些共享内存时,我会这样做:

hFileMap = open(MapName, O_RDWR | O_CREAT, 438);

pData = mmap(NULL, Size, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, hFileMap, 0);

而且效果很好。它正确映射内存。然而,出现了三件我不喜欢的事情。

  1. 它在光盘上创建一个物理文件。我必须手动删除此文件或使用 remove 功能。我喜欢在 Windows 上没有物理文件,除非我自己映射一个文件。我想在 Linux 上做同样的事情。

  2. 我必须使用 ftruncate 来设置文件的长度。否则 memcpy 将数据复制到文件中时会发生段错误。我的意思是,当我必须首先指定 mmap 的大小时,文件的空间为 0 没有多大意义。

  3. 大小是固定的。我不需要调整大小,所以应该不需要 ftruncate?

有没有办法在没有物理文件的情况下映射内存并且仍然有其他进程能够访问它?解决方案的缺点是什么?

我不太关心 ftruncate 但有没有办法也删除调用?当我不必在 Windows 上执行此操作时,这让我有点困扰。

最佳答案

shm_open 仍然会在文件系统中创建一个文件来表示共享内存对象。

您可以使用 map_anonymous 和 map_shared 调用 mmap,它不会创建任何文件。但是,其他进程必须是当前进程的子进程,并且必须在调用 fork 之前设置 mmap。

如果那行不通,那么 shm_open 是您最好的选择。

关于c++ - 没有 ftruncate 和物理文件的 Linux 上的共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com