Хобрук: Ваш путь к мастерству в программировании

(Linux) Чтение нескольких файлов как одного без необходимости сначала копировать фрагменты в новый файл.

(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!

07.08.2017

  • Помимо проблем с заполнением, может быть, можно mmap() два файла в соседнее пространство памяти? 07.08.2017
  • Спасибо, и я рассмотрю это, если мне придется самостоятельно создавать файловую систему предохранителей, поскольку мои веб-исследования ничего не дали. На данный момент я исследую не уровень программирования, а скорее механизм (например, именованные каналы), который можно использовать с любой универсальной оболочкой или интерактивными программами. 07.08.2017

Ответы:


1

Итак, поскольку его, по-видимому, не существовало, я просто создаю его!

Вот: мфс

Это файловая система предохранителей, которая будет отвечать на мой вопрос, а именно «фактически объединить несколько файлов в один».

Затем становится возможным доступ (только для чтения) к объединенному файлу, как если бы он был фактически объединен в один файл командой cat.

Как уже говорилось в вопросе, это полезно только в том случае, если вам нужен доступ к произвольному чтению, поскольку доступ к потоку может осуществляться через именованные каналы.

Вот он: https://github.com/Bylon/mfs

Наслаждаться!

31.08.2017
Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...