NOM
truncate, ftruncate, truncate64, ftruncate64 - Tronquer un fichier à
une longueur donnée.
SYNOPSIS
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
int truncate64(const char *path, off64_t length);
int ftruncate64(int fd, off64_t length);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
truncate() : _BSD_SOURCE || _XOPEN_SOURCE >= 500
ftruncate() : _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_POSIX_C_SOURCE >= 200112L
En environnement 32 bits, truncate64 et ftruncate64 opèrent sur les
fichiers de taille supérieure à 2 Go (moins un octet). Se référer à open(2)
(O_LARGEFILE) ou au standard LFS.
Les appels truncate() et ftruncate() tronquent le fichier ordinaire
référencé par path ou par le descripteur fd à une longueur d’exactement
length octets.
Si le fichier était plus long, les données supplémentaires sont
perdues. Si le fichier était plus court, il est étendu, et la portion
supplémentaire est remplie caractères nuls (« \0 »).
Le pointeur de position n’est pas modifié.
Si la taille est modifiée, les champs st_ctime et st_mtime du fichier
(respectivement heure de dernière modification d’état et de dernière
modification ; voir stat(2)) sont mis à jour, et les bits Set-UID et
Set-GID peuvent être effacés.
Avec ftruncate(), le fichier doit être ouvert en écriture ; avec
truncate(), il doit être accessible en écriture.
VALEUR RENVOYÉE
En cas de réussite, zéro est renvoyé, sinon -1 est renvoyé et errno
contient le code d’erreur.
ERREURS
Pour truncate() :
EACCES Le fichier n’est pas accessible en écriture, ou un élément du
chemin d’accès ne permet pas le parcours. (Voir aussi
path_resolution(7).)
EFAULT Path pointe en dehors de l’espace d’adressage accessible.
EFBIG L’argument length dépasse la taille maximum d’un fichier.
EINTR Un signal a été capturé pendant l’exécution.
EINVAL L’argument length est négatif ou plus grand que la taille
maximale d’un fichier.
EIO Une erreur d’entrée-sortie bas niveau s’est produite.
EINTR Alors qu’il était bloqué en attente de fin, l’appel a été
interrompu par un gestionnaire de signal ; voir fcntl(2) et
signal(7).
EISDIR Le fichier est en réalité un répertoire.
ELOOP Trop de liens symboliques ont été rencontrés en parcourant le
chemin.
ENAMETOOLONG
Un composant du chemin dépasse 255 caractères ou le chemin
complet dépasse 1023 caractères.
ENOENT Le fichier indiqué n’existe pas.
ENOTDIR
Un élément du chemin d’accès n’est pas un répertoire.
EPERM Le système de fichiers ne permet pas d’agrandir un fichier
au-delà de sa taille actuelle.
EROFS Le fichier spécifié réside sur un système de fichiers en lecture
seule.
ETXTBSY
Le fichier est un programme actuellement en cours d’exécution.
Pour ftruncate() les mêmes erreurs sont possibles, sauf qu’au lieu des
problèmes avec path, on peut en avoir avec le descripteur de fichier
fd :
EBADF fd n’est pas un descripteur valable.
EBADF ou EINVAL
fd n’est pas ouvert en écriture.
EINVAL fd n’est pas un descripteur de fichier ordinaire.
CONFORMITÉ
BSD 4.4, SVr4, POSIX.1-2001 (ces appels système sont apparus dans
BSD4.2).
NOTES
La description ci-dessus est celle des systèmes compatibles XSI. Pour
les systèmes non compatibles, le standard POSIX autorise deux
comportements pour ftruncate() quand length dépasse la longueur du
fichier (notez que truncate() n’est pas du tout spécifié dans un tel
environnement) : soit renvoyer une erreur, soit étendre le fichier.
Linux, comme la plupart des Unix, suit le comportement XSI sur les
systèmes de fichiers natifs. Cependant, certains systèmes de fichiers
non natifs ne permettent pas l’utilisation de truncate() et ftruncate()
pour étendre un fichier au-delà de sa taille actuelle : un exemple
notable sous Linux est VFAT.
VOIR AUSSI
open(2), stat(2), path_resolution(7)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Révisé pour ce site par l'équipe man-linux-magique.net (Octobre 2010).
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».