Відповіді:
У операційних системах на базі Linux, це можна зробити з пристроями мережевого блоку або пристроями відображення пристроїв. Отриманий файл - це блоковий пристрій.
З nbd
:
ln -s /path/to/first-file file.0
...
ln -s /path/to/last-file file.19
nbd-server -C /dev/null -m 127.0.0.1:12345 file
sudo nbd-client localhost 12345 /dev/nbd0
(конкатенація є /dev/nbd0
).
З картографічним пристроєм пристрою (розміри файлів повинні бути кратними 512):
sudo losetup /dev/loop0 file1
sudo losetup /dev/loop1 file2
s0=$(sudo blockdev --getsize /dev/loop0)
s1=$(sudo blockdev --getsize /dev/loop1)
printf '%s\n' "0 $s0 linear /dev/loop0 0" "$s0 $s1 linear /dev/loop1 0" |
sudo dmsetup create mybundle
(конкатенація є /dev/mapper/mybundle
).
сьогодні написав драйвер запобіжників, якщо когось цікавить рішення запобіжника (картографічний пристрій, а також рішення nbd вище створить блокові пристрої, а не звичайні файли - це порушиться, якщо ви хочете використовувати отриманий вихід безпосередньо з редагуванням відео програмне забезпечення або інші інструменти, які не готові читати безпосередньо з блокового пристрою)
Ви в основному відповіли на це в першому реченні питання: так, це можна зробити. Однак вам доведеться написати спеціальний драйвер файлової системи. Якщо він повинен бути об'єктом файлової системи, його має обробляти ядро на якомусь рівні (що включає FUSE ). Водій повинен забезпечити бекенд для стандартної файлової системи системних викликів API ( stat()
, і open()
т.д., включаючи пошук). Ви не можете зробити це повністю в просторі користувача (принаймні, не з монолітним ядром, - але навіть з мікрокереллю вам все-таки потрібно надати драйвер файлової системи, хоч це працює як звичайний процес в просторі користувачів).