【问题标题】:create a ramdisk in C++ on linux在 linux 上用 C++ 创建一个 ramdisk
【发布时间】:2012-09-19 03:20:06
【问题描述】:

我需要制作一个 ramfs 并使用 c++ 将其挂载到 linux 中的目录。我想让它像一个用户(不是sudo)。

我需要在我创建的文件上调用应用程序,而且会经常调用。将其写入硬盘非常慢。

我刚刚发现:

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

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

【问题讨论】:

  • 您可以将文件一次读入内存并仅操作内存中的表示。完成后,将其写回磁盘。
  • 为什么不在fstab 文件中添加一个tmpfs 条目?添加user 标志,以便用户可以按需安装它。或者只使用内存映射文件。
  • 我想获得超级用户权限是唯一的方法。这可以通过一些 C++ 代码或使用 setuid 位授予您可执行的 root 权限来完成。
  • 我的应用程序将写入一个文件,并在其上调用另一个应用程序。另一个应用程序会向这个文件写入一些魔法,我的应用程序会读取它等等。这是很常见的。这个应用程序将被分发,所以我不能希望所有将使用它的用户编辑 fstab。
  • 您可能还想考虑在现实世界中对此进行基准测试,因为无论如何都会缓存 20 MB。那么 /tmp 呢,它是当今任何合理系统上的 ramdisk?

标签: c++ linux creation ramdisk


【解决方案1】:

对于用户空间 ramfs 解决方案,您可以使用python-fuse-ramfs

【讨论】:

    【解决方案2】:

    我检查/tmp 是否是 ramfs,但不是。它在 HDD 上创建文件。但是当我运行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。 Here/dev/shm 的描述和用法。唯一的问题是tmpfswill not grow dynamically,但对我来说就足够了(20MB - 1GB)。

    【讨论】:

    • 正如themel 所指出的,/tmp 中的文件将在 RAM 中。不是因为它是一个 tmpfs,而是因为文件缓存是惰性的。
    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多