Поскольку FIFO передает скорость по каналу, я считаю размещение его в псевдодиске названным /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 существует почти всегда много способов сделать в значительной степени то же самое. Существует много способов записать в файл, читать из файла и освободить файл, хотя именованные каналы имеют определенную эффективность, идущую для них.
С одной стороны, содержание именованного канала находится в памяти вместо того, чтобы быть записанным в диск. Это передается только, когда оба конца канала были открыты. И можно записать в канал многократно, прежде чем он будет открыт в другом конце и считан.
Для Linux, да, это универсально доступно и согласно документации ( https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt ) glibc, стандартная библиотека для C для Linux ожидает /dev/shm
существовать.
Однако я все еще предложил бы пересмотреть дизайн Вашего сценария или программы. FIFOs и сокеты имеют тенденцию быть помещенными в /var/run/appname
или /tmp/
каталоги. Хороший пример этого /var/run/acpid.socket
. Так как те файловые системы также tmpfs точно так же, как /dev/shm
, нет никакого различия в производительности.
BTW, помещая FIFOs в tmpfs не должен влиять на производительность, так как каналы трудно кодировали размер буфера 65 536 байтов на Linux, но могут быть изменены через/proc/sys/fs/pipe-max-size. См. https://unix.stackexchange.com/a/11954/85039
Данные, перемещающиеся через FIFO специальный файл, никогда не будут поражать файловую систему. Это означает, что, является ли базовая файловая система tmpfs или ext2, скорость FIFO должна быть тем же.
/dev/shm
предназначается для использования реализацией общей памяти POSIX. Для другого использования, /tmp
или /run
было бы более соответствующим. Если Ваш именованный канал является определенным для пользователя, с помощью $XDG_RUNTIME_DIR
от , Спецификация Базового каталога XDG может быть соответствующей.