Y at-il une fonction dans la bibliothèque C sous Linux qui peut définir la longueur d'un fichier? Sous Windows, je sais qu'il existe une fonction SetFileLength(). Si ce n'est pas le cas, quel est le meilleur moyen de raccourcir un fichier sans le supprimer et le réécrire?Fonction comme SetFileLength() dans C Library for Linux
Répondre
Vous pouvez utiliser le truncate function.
int truncate(const char *path, off_t length);
De la page man:
« Le troncature() et ftruncate() provoquent le fichier régulier nommé par le chemin ou référencé par fd à tronquée à une taille précisément octets de longueur. Si le fichier était plus grande que cette taille, les données supplémentaires sont perdues si le fichier était plus court, il est prolongé, et la partie étendue est remplie d'octets nuls »
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
de son manpage.
Le troncature() et ftruncate() fonctions provoquent le fichier régulier nommé par chemin ou référencé par fd être tronquée à une taille de précisément octets de longueur.
Si le fichier précédemment était plus grand que cette taille, les données supplémentaires sont perdues. Si le fichier précédemment était plus court, il est étendu et la partie étendue lit comme null octets ('\ 0').
Merci, mais est-ce portable? – codymanix
codymanix, il est de POSIX, donc il est supposé être disponible dans les systèmes d'exploitation POSIX. –
Notez que truncate n'est pas spécifié pour les systèmes POSIX uniquement. il nécessite des systèmes conformes XSI. de l'autre côté, il est dit que la plupart des unités sont conformes à la norme xsi. Donc, je pense que vous devriez aller bien avec tronqué. –