Pada sistem Linux baru-baru ini yang sebenarnya mungkin, tetapi dengan blok (4096 sebagian besar waktu), tidak byte granularity, dan hanya pada beberapa sistem file (ext4 dan xfs).
Mengutip dari halaman fallocate(2)
manual:
int fallocate(int fd, int mode, off_t offset, off_t len);
[...]
Menyempitkan ruang file
Menentukan FALLOC_FL_COLLAPSE_RANGE
flag (tersedia sejak Linux 3.15) dalam mode
menghapus rentang byte dari file, tanpa meninggalkan lubang. Rentang byte yang akan diciutkan dimulai pada offset
dan berlanjut untuk len
byte. Pada penyelesaian operasi, isi file mulai dari lokasi offset+len
akan ditambahkan di lokasi
offset
, dan file akan lebih len
kecil byte.
[...]
Meningkatkan ruang file
Menentukan FALLOC_FL_INSERT_RANGE
flag (tersedia sejak Linux 4.1) dalam mode
meningkatkan ruang file dengan memasukkan lubang di dalam ukuran file tanpa menimpa data yang ada. Lubang akan dimulai pada
offset
dan berlanjut untuk len
byte. Saat memasukkan lubang di dalam file, isi file mulai dari offset
akan digeser ke atas (yaitu, ke file offset yang lebih tinggi) oleh len
byte. Memasukkan lubang di dalam file meningkatkan ukuran file dengan len
byte.