我是编程新手,程序员在我的beaglebone black上共享一些内存,它运行在Linux上。
我需要确保内存保存在Beaglebone blacks ram上,而不是闪存。
文件路径是:
#define FILEPATH "/tmp/mmapped.bin"
fd = open(FILEPATH, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
if (fd == -1) {
perror("Error opening file for writing");
exit(EXIT_FAILURE);
}
用C ++编码
如果需要进一步的问题,请告诉我。
答案 0 :(得分:0)
文件路径/tmp/whatever
不保证任何内容。您需要做的是登录您的Beaglebone,看看哪些文件系统安装在哪里。
要将文件存储在RAM中,您需要将它们存储在tmpfs
或ramfs
文件系统中。
在我的Fedora Linux笔记本电脑上,如果我输入mount
或cat /proc/mounts
,我会看到所有已挂载的内容。这些是你正在寻找的那些行:
$ grep tmpfs /proc/mounts
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
tmpfs /tmp tmpfs rw,seclabel,nosuid,nodev 0 0
所以你可以看到在Fedora上,/tmp/
目录是tmpfs
,/tmp/
中的文件将在RAM中。
使用tmpfs
需要注意的一点是默认的最大大小是RAM的一半。如果tmpfs中的文件,加上使用RAM的程序超过RAM大小,那么tmpfs
数据将进入交换,如果Beaglebone甚至已经交换,它将在Flash上,我不记得此刻
如果没有交换或者它很小,那么对大文件使用tmpfs将导致OOM(内存不足)并破坏很多东西,所以要小心你使用多少。