L'ajout d'un fichier volumineux à un fichier volumineux est difficile, car tous les caractères doivent être déplacés vers l'avant. Cependant, pourrait-il être fait en manipulant l'inode comme suit ?:Ajouter un fichier temporaire sans fichier temporaire en manipulant inode?
Allouer un nouveau bloc sur le disque et remplir avec vos données PREPEND.
Tweak le inode pour lui dire votre nouveau bloc est maintenant le premier bloc , et de remonter l'ancien premier bloc à la deuxième position bloc , ancien second bloc à la troisième position, et ainsi de suite.
Je sais que cela nécessite encore supplantation blocs avant, mais il devrait être plus efficace que d'avoir à utiliser un fichier temporaire.
Je réalise également que le nouveau premier bloc sera un bloc "court" (toutes les données du bloc ne font pas partie du fichier), car il est peu probable que vos données soient exactement de la même taille qu'un bloc. Ou, si les blocs d'inodes sont simplement liés, il faudrait très peu de travail pour faire ce qui précède.
NOTE: ma dernière expérience des données de disque manipulant directement était avec un Commodore 1541, donc ma connaissance peut être un peu à jour ...
Je suis d'accord que les inodes devraient être cachés. Nous cherchons un moyen pour l'OS de faire l'inode au violon pour nous. Comme un fichier est un arbre, l'insertion au début ou ailleurs devrait être aussi rapide que l'insertion seulement à la fin en l'ajoutant au fichier. –
Si la structure de comptabilité de l'extension de l'i-noeud est semblable à celle de l'arborescence (qui dépend du FS), alors le fichier "sparse file" devrait - en théorie; - faire l'affaire. Avez-vous essayé? – Sven
IIUC, vous suggérez de réserver 50 Mo d'espace vide inutilisé au début du fichier, d'enregistrer quelque part la quantité de fichier à ignorer lors de la lecture, et quand vous avez un nouveau MB à ajouter, réduisez-le à 49 et écrivez à la fin de la section clairsemée. Cela devrait fonctionner, mais ce serait bien de pouvoir l'insérer à n'importe quel moment dans le fichier. –