À ma connaissance, pour manipuler des fichiers, il n'y a que le sys_write syscall sous Linux, qui écrase le contenu du fichier (ou l'étend, si à la fin).
Pourquoi n'y a-t-il pas d'appels système pour insérer ou supprimer du contenu dans des fichiers sous Linux?
Comme tous les systèmes de fichiers actuels n'exigent pas que le fichier soit stocké dans un bloc de mémoire continue, une implémentation efficace devrait être possible. (Les fichiers seraient fragmentés.)
Avec les fonctionnalités du système de fichiers telles que la «copie en écriture» ou la «compression de fichiers transparente», la manière actuelle d'insérer du contenu semble être très inefficace.
files
file-copy
system-calls
dercolamann
la source
la source
Réponses:
Sur les systèmes Linux récents, c'est possible, mais avec le bloc (4096 la plupart du temps), pas la granularité en octets , et seulement sur certains systèmes de fichiers (ext4 et xfs).
Citant la
fallocate(2)
page de manuel:la source
Les systèmes de fichiers peuvent ne pas exiger que les fichiers soient stockés dans une zone continue (et cela serait en effet très rigide), mais généralement les fichiers sont stockés dans des blocs de taille fixe (ou des séquences de blocs contigus). Le faire de cette façon simplifie l'implémentation, et les blocs sont généralement des multiples de la taille de bloc du périphérique sous-jacent.
Ainsi, l'implémentation d'insertions de blocs de longueur arbitraire rendrait le format et l'implémentation du système de fichiers plus complexes ou nécessiterait le déplacement de grandes quantités de données. Ni l'un ni l'autre n'est vraiment bon, et des structures de données complexes peuvent être construites dans l'espace utilisateur au-dessus de l'API du système de fichiers.
la source