(Linux) Проблема в следующем:
Предположим, что у нас есть foo_1 и foo_2, фактически являющиеся двумя фрагментами файла foo, такими как команда:
cat foo_1 foo_2 >foo
Я хотел бы, чтобы система могла рассматривать {foo_1 + foo_2} как один файл foo без необходимости сначала копировать его с помощью приведенной выше команды.
В зависимости от команды, которую вы используете для чтения {foo_1 + foo_2], скажем, вам нужна сумма md5, вы можете просто использовать именованные каналы, и она предоставляет эту функцию.
Вы бы сделали:
mkfifo my_named_pipe
cat foo_1 foo_2 >my_named_pipe &
md5sum my_named_pipe
Это работает!
Но у именованных каналов есть большое ограничение: все обращения должны быть последовательными (без поиска), так как это в основном канал.
Следовательно, этот метод «именованных каналов» не является «универсальным чтением нескольких файлов как одного виртуального файла».
Действительно, это работает в приведенном ниже примере для md5sum, потому что md5sum требуется только последовательное чтение файла. Теперь, если этот файл был, скажем, rar-файлом или видео, которое вы хотели бы прочитать с помощью VLC, или ISO-образом, который вы хотели бы смонтировать и выполнить произвольный доступ, это не удастся, поскольку этим программам требуется непоследовательное чтение.
Вопрос: Итак, перед тем, как позвонить на Голгофу, я имею в виду написать себе файловую систему fuse, которая будет делать то, что я описал выше, чтобы сэкономить драгоценный ввод-вывод и пространство, я хотел бы знать, слышали ли вы о общий метод для этого.
То, о чем я думаю, выглядит примерно так:
fuseVirtualFile mountpoint foo foo_1 foo_2
Это покажет «виртуальный файл» foo под точкой монтирования, поэтому mountpoint/foo
Этот «виртуальный файл» будет конкатенацией foo_1 и foo_2 только для чтения, без необходимости выполнять ввод-вывод записи, что экономит время, дисковое пространство и износ SSD!