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)之间共享内存。最好使用共享内存而不是套接字或管道,因为如果消费者不可用,我不希望数据在缓冲区中等待。
似乎有一种方法/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 内存映射文件 - 共享内存(多进程)