Untuk pemahaman saya, untuk memanipulasi file hanya ada sys_write syscall di Linux, yang menimpa konten file (atau memperluasnya, jika pada akhirnya).
Mengapa tidak ada syscalls untuk menyisipkan atau menghapus konten dalam file di Linux?
Karena semua sistem file saat ini tidak memerlukan file untuk disimpan dalam blok memori berkelanjutan, implementasi yang efisien harus dimungkinkan. (File akan terfragmentasi.)
Dengan fitur sistem file sebagai "copy on write" atau "kompresi file transparan", cara saat memasukkan konten tampaknya sangat tidak efisien.
files
file-copy
system-calls
dercolamann
sumber
sumber
Jawaban:
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:sumber
Filesystem mungkin tidak memerlukan file untuk disimpan dalam area kontinu (dan itu akan sangat tidak fleksibel), tetapi biasanya file disimpan dalam blok ukuran tetap (atau urutan blok yang berdekatan). Melakukannya dengan cara menyederhanakan implementasi, dan blok biasanya kelipatan dari ukuran blok perangkat yang mendasarinya.
Jadi, menerapkan sisipan blok dengan panjang sewenang-wenang akan membuat format dan implementasi sistem file menjadi lebih kompleks atau membutuhkan pemindahan sejumlah besar data yang berpotensi. Tidak satu pun dari itu yang benar-benar bagus, dan struktur data yang kompleks dapat dibangun di userspace di atas API sistem file.
sumber