如何在没有持久文件的 Linux 中使用 .NET 内存映射文件?

Edw*_*vey 5 .net c# linux memory-mapped-files

在 Linux 上使用 .NET (dotnet 5.0)MemoryMappedFile.CreateFromFile()可以工作(但不支持mapName),但会抛出CreateNew()和。由于不支持命名映射,这意味着仅支持持久文件支持的内存映射。CreateOrOpen()OpenExisting()System.PlatformNotSupportedException: Named maps are not supported.

有没有办法在 Linux 上的 .NET 中获得基于内存的非持久 MMF?也许是一些 Mono 库,或者 NuGet 中的其他东西?或者甚至是一个使用的工作示例pinvoke

我想在 Linux 中的 C# .NET 应用程序和其他一些应用程序(可能是 C、C++ 和/或 python)之间共享内存。最好使用共享内存而不是套接字或管道,因为如果消费者不可用,我不希望数据在缓冲区中等待。

use*_*055 0

似乎有一种方法/dev/shm

持久性POSIX 共享内存对象具有内核持久性:共享内存对象将一直存在,直到系统关闭,或者直到所有进程取消映射该对象并使用 shm_unlink(3) 删除它

通过文件系统访问共享内存对象在 Linux 上,共享内存对象是在 (tmpfs(5)) 虚拟文件系统中创建的,通常安装在 /dev/shm 下。从Linux 2.6.19开始,Linux支持使用访问控制列表(ACL)来控制虚拟文件系统中对象的权限。

这应该有效:

MemoryMappedFile.CreateFromFile("/dev/shm/test", System.IO.FileMode.OpenOrCreate, null, 100000);
Run Code Online (Sandbox Code Playgroud)

C# (mono) Linux 内存映射文件 - 共享内存(多进程)