我试图使用mmap在设备上的进程之间映射和共享数据。我的目标是一个运行嵌入式Linux的嵌入式设备。
我的流程是使用C++以及std::list和std::map等容器实现的。显然,随着程序的运行,容器的大小正在发生变化。
例如,如果我使用要在进程之间共享的结构,例如:
struct MYSTRUCT
{
int val1;
int val2;
list <int> list1;
};
MYSTRUCT myStruct;
// later as the program runs for example...
myStruct.list1.push_ba
我有一个共同的共享内存空间,多个进程可以对它进行读写。在使用shm_open()访问共享内存和mmap()写入内存映射文件时,我遇到了这个问题。但是,在对包装器方法进行了几次调用之后,当我调用ERRNO 24时,会遇到shm_open() (打开的文件太多)。
我尝试使用shm_unlink(),但这关闭了与共享内存空间相关联的名称,并且无法再次使用关联的名称访问该内存。如何关闭文件描述符并保持与共享内存关联的名称?
本质上,我希望包装器函数能够这样做:
public static void Write(string name, int size, int offset, List<by
我有一个SH4板,这是规格..。
uname -a
Linux LINUX7109 2.6.23.17_stm23_A18B-HMP_7109-STSDK #1 PREEMPT Fri Aug 6 16:08:19 ART 2010
sh4 unknown
假设我已经吃光了几乎所有的内存,只剩下9MB。
free
total used free shared buffers cached
Mem: 48072 42276 5796 0 172 3264
-/+ bu
我有一个C程序,它在循环的某个点分叉子进程。子进程等待父进程完成其工作(一些数值计算)。如果出了问题,父进程将中止,子进程应该在分叉时从状态继续,并在修改后重试计算。否则,父母将继续运行,而子进程将被终止。
父进程和子进程之间的通信是通过内存映射文件进行的,该文件只有一个字节作为指示父进程状态的字符。
内存映射是这样完成的
char child_flag[]="W";
fp1 = fopen( "child_interface.dat","wb");
// the interface file has two b
下面是一个简单而完美的解决方案,适用于具有共享内存的IPC,而不必使用网络/套接字( Windows上有 )。唯一的问题是它是Linux上的:
避免使用标记参数将有助于保持代码在Unix和Windows之间的可移植性。
mmap**?**中是否有一种简单的内置方式,不需要有条件分支“如果平台是,如果平台是Linux”,就有一个共享内存
有点像
mm = sharedmemory(size=2_000_000_000, name="id1234") # 2 GB, id1234 is a global