En gros, c'est la solution que j'ai citée dans mon post: tout écrire dans un fichier temporaire sauf les octets à supprimer, puis déplacer le fichier temporaire
Je pense pas que ce soit une bonne idée: mettons nous dans le pire des cas: je veux réduire 50 fois un fichier de 100 Mo (taille maximale je pense des fichiers que je veux manipuler). Dans ce pire des cas, je suis obligé de faire appel 50 fois à la fonction (ça, c'est lié à la structure de mon programme, et je ne peux pas changer ce comportement sans faire un hack immonde - et quitte à faire un hack dégueulasse, je préfère encore utiliser ma solution de rechange, qui gaspille de la place dans le fichier mais qui a le mérite d'être extrémement rapide). Donc je dois écrire 50*100 = 5000 = 5 Go sur le disque dur ! Et ça, c'est en comptant que déplacer le fichier ne recopie pas les données - si le répertoire /tmp est sur une partition différente on va devoir écrire 10 Go sur le disque... A contition que la partition /tmp soit assez grande, sinon le programme plante
De plus, soit j'utilise un buffer variable pour stocker les données lues par read (et dans ce cas si l'octet à supprimer est au début ou à la fin du fichier ça bouffera 100 Mo en RAM), soit un buffer constant (et dans ce cas je dois choisir une taille, trop grande, ça bouffe de la mem pour rien, trop petit je devrais faire beaucoup d'appels à read-write sur de petits buffer, et ça dégradera les performances)
Ma question, c'est s'il existe pas un moyen aussi simple pour réduire la taille d'un fichier que O_APPEND pour l'augmenter...
[^] # Re: AMHA
Posté par Moonz . En réponse au message Supprimer le contenu d'un fichier. Évalué à 1.
Je pense pas que ce soit une bonne idée: mettons nous dans le pire des cas: je veux réduire 50 fois un fichier de 100 Mo (taille maximale je pense des fichiers que je veux manipuler). Dans ce pire des cas, je suis obligé de faire appel 50 fois à la fonction (ça, c'est lié à la structure de mon programme, et je ne peux pas changer ce comportement sans faire un hack immonde - et quitte à faire un hack dégueulasse, je préfère encore utiliser ma solution de rechange, qui gaspille de la place dans le fichier mais qui a le mérite d'être extrémement rapide). Donc je dois écrire 50*100 = 5000 = 5 Go sur le disque dur ! Et ça, c'est en comptant que déplacer le fichier ne recopie pas les données - si le répertoire /tmp est sur une partition différente on va devoir écrire 10 Go sur le disque... A contition que la partition /tmp soit assez grande, sinon le programme plante
De plus, soit j'utilise un buffer variable pour stocker les données lues par read (et dans ce cas si l'octet à supprimer est au début ou à la fin du fichier ça bouffera 100 Mo en RAM), soit un buffer constant (et dans ce cas je dois choisir une taille, trop grande, ça bouffe de la mem pour rien, trop petit je devrais faire beaucoup d'appels à read-write sur de petits buffer, et ça dégradera les performances)
Ma question, c'est s'il existe pas un moyen aussi simple pour réduire la taille d'un fichier que O_APPEND pour l'augmenter...