Насколько я понимаю, для манипулирования файлами в Linux существует только системный вызов sys_write, который перезаписывает содержимое файла (или расширяет его, если в конце).
Почему в Linux нет системных вызовов для вставки или удаления контента в файлах?
Поскольку все современные файловые системы не требуют сохранения файла в непрерывном блоке памяти, должна быть возможна эффективная реализация. (Файлы будут фрагментированы.)
С такими функциями файловой системы, как «копирование при записи» или «прозрачное сжатие файлов», текущий способ вставки содержимого кажется очень неэффективным.
files
file-copy
system-calls
dercolamann
источник
источник
Ответы:
На последних системах Linux это действительно возможно, но с блоками (4096 большую часть времени), без байтовой детализации, и только на некоторых файловых системах (ext4 и xfs).
Цитирование из
fallocate(2)
справочной страницы:источник
Файловые системы могут не требовать, чтобы файлы хранились в непрерывной области (и это действительно было бы очень негибко), но обычно файлы хранятся в блоках фиксированного размера (или последовательностях смежных блоков). Это упрощает реализацию, и блоки обычно кратны размеру блока базового устройства.
Таким образом, реализация вставок блоков произвольной длины сделает формат и реализацию файловой системы более сложным или потребует перемещения потенциально больших объемов данных. Ни один из них не является действительно хорошим, и сложные структуры данных могут быть построены в пользовательском пространстве поверх API файловой системы.
источник