`/dev/shm` 在 Linux 和 Ubuntu 中通用吗?

`/dev/shm` 在 Linux 和 Ubuntu 中通用吗?

为了提高 FIFO 管道速度,我考虑将其放置在名为 的 RAM 磁盘中/dev/shm。我看到那里已经有一些文件:

$ ll /dev/shm
total 1536
drwxrwxrwt  2 root    root         280 Oct  2 17:19 ./
drwxr-xr-x 22 root    root        4840 Oct  2 05:49 ../
-rwx------  1 rick    rick    67108904 Oct  2 04:29 pulse-shm-1087740037*
-rwx------  1 lightdm lightdm 67108904 Oct  2 04:29 pulse-shm-1609193682*
-rwx------  1 rick    rick    67108904 Oct  2 04:34 pulse-shm-2114917541*
-rwx------  1 rick    rick    67108904 Oct  2 04:29 pulse-shm-2616701246*
-rwx------  1 rick    rick    67108904 Oct  2 17:14 pulse-shm-3211887872*
-rwx------  1 rick    rick    67108904 Oct  2 17:14 pulse-shm-3411101615*
-rwx------  1 rick    rick    67108904 Oct  2 04:32 pulse-shm-3740841284*
-rwx------  1 lightdm lightdm 67108904 Oct  2 04:29 pulse-shm-4039050064*
-rwx------  1 rick    rick    67108904 Oct  2 04:29 pulse-shm-608722223*
-rwx------  1 rick    rick    67108904 Oct  2 05:46 pulse-shm-629296834*
-rwx------  1 rick    rick    67108904 Oct  2 17:19 pulse-shm-791566179*
-rwx------  1 lightdm lightdm 67108904 Oct  2 04:29 pulse-shm-871250926*

是否可以安全地假设该目录在所有 Ubuntu 系统上都是通用的,或者甚至在所有 Linux 系统上都是通用的?

如果目录不存在,我将创建管道 FIFO 文件,/tmp但希望这种情况永远不会发生。


编辑:非常感谢下面两个很棒的答案,我找到了这篇文章:为什么在 Linux 上使用命名管道

为什么要使用命名管道?

命名管道很少使用是有原因的。在 Unix 系统上,几乎总是有很多方法可以做几乎相同的事情。有很多方法可以写入文件、从文件读取和清空文件,尽管命名管道具有一定的效率。

首先,命名管道内容驻留在内存中,而不是写入磁盘。只有当管道两端都已打开时,才会传递内容。而且,在另一端打开并读取之前,您可以多次写入管道。

答案1

对于 Linux,是的,它是普遍可用的,并且根据文档(https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt) glibc,Linux 的标准 C 库预计/dev/shm存在。

不过,我还是建议你重新考虑一下你的脚本或程序的设计。FIFO 和套接字通常被放置在/var/run/appname/tmp/目录中。一个很好的例子就是/var/run/acpid.socket。由于这些文件系统也是 tmpfs,就像 一样/dev/shm,因此性能没有差异。

顺便说一句,将 FIFO 放在 tmpfs 中不会影响性能,因为管道在 Linux 上具有 65536 字节的硬编码缓冲区大小,但可以通过 /proc/sys/fs/pipe-max-size 进行更改。请参阅https://unix.stackexchange.com/a/11954/85039

答案2

通过 FIFO 特殊文件传输的数据永远不会到达文件系统。这意味着无论底层文件系统是 tmpfs 还是 ext2,FIFO 的速度都应该相同。

/dev/shm旨在供 POSIX 共享内存实现使用。对于其他用途,/tmp/run更合适。如果您的命名管道是用户特定的,请$XDG_RUNTIME_DIR使用XDG 基础目录规范可能是合适的。

相关内容