在Linux上用C++创建一个内存磁盘

6

我需要使用制作ramfs并将其挂载到Linux中的一个目录。我想让它像用户一样使用(没有sudo)。

我需要在经常使用的文件上调用一个应用程序。将其写入硬盘非常慢。

我只找到了:

system("mkdir /mnt/ram");
system("mount -t ramfs -o size=20m ramfs /mnt/ram");

但这并不好。我想成为一个普通用户,而mount命令只能作为root调用。我该怎么办?


1
你可以将文件读取到内存中,仅操作内存中的表示形式。完成后,将其写回磁盘即可。 - MadScientist
为什么不在fstab文件中添加一个tmpfs条目呢?添加“user”标志,以便用户可以按需挂载它。或者只需使用内存映射文件即可。 - Some programmer dude
我猜获得超级用户权限是唯一的方法。这可以通过一些C++代码或使用setuid位为可执行文件授予根权限来完成。 - Paolo
2
您可能还想考虑在现实世界中对其进行基准测试,因为仅20 MB将被缓存。那么/tmp呢?在任何合理的系统上,它都是一个ramdisk。 - themel
C++ 看起来有点多余,因为你正在使用 system :-) - Ciro Santilli OurBigBook.com
显示剩余3条评论
2个回答

1

如果您需要一个用户空间的ramfs解决方案,您可以使用python-fuse-ramfs


0

我检查了/tmp是否为ramfs,但它不是。它在硬盘上创建文件。但当我运行df -h时,它输出:

rootfs                       25G  9,4G   15G  40% /
devtmpfs                    1,9G     0  1,9G   0% /dev
tmpfs                       1,9G  1,6G  347M  83% /dev/shm
tmpfs                       1,9G  1,3M  1,9G   1% /run
/dev/mapper/vg_micro-root    25G  9,4G   15G  40% /
tmpfs                       1,9G     0  1,9G   0% /sys/fs/cgroup
tmpfs                       1,9G     0  1,9G   0% /media
/dev/mapper/vg_micro-stack  289G  191M  274G   1% /stack
/dev/mapper/vg_micro-home   322G   40G  266G  14% /home
/dev/sda2                   485M   89M  371M  20% /boot
/dev/sda1                   200M   19M  182M  10% /boot/efi

这意味着tmpfs(ramdisk)是:/dev/shm/run/sys/fs/cgroup/media。但只有其中一个被用作进程间通信的临时ramdisk,使用文件。这里/dev/shm的描述和用法。唯一的问题是tmpfs不会动态增长,但对于我的目的来说足够了(20MB - 1GB)。

正如themel所指出的那样,/tmp目录中的文件将存储在RAM中。这不是因为它是tmpfs,而是因为文件缓存是惰性的。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接