DOKK / manpages / debian 11 / manpages-fr-dev / ftruncate.2.fr
TRUNCATE(2) Manuel du programmeur Linux TRUNCATE(2)

truncate, ftruncate - Tronquer un fichier à une longueur donnée

#include <unistd.h>
#include <sys/types.h>

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);

Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :

truncate() :

_XOPEN_SOURCE >= 500
|| /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE

ftruncate() :

_XOPEN_SOURCE >= 500
|| /* Since glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE

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é.

If the size changed, then the st_ctime and st_mtime fields (respectively, time of last status change and time of last modification; see inode(7)) for the file are updated, and the set-user-ID and set-group-ID mode bits may be cleared.

Avec ftruncate(), le fichier doit être ouvert en écriture ; avec truncate(), il doit être accessible en écriture.

En cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé et errno reçoit une valeur adéquate.

Pour truncate() :

Le fichier n'est pas accessible en écriture, ou un élément du chemin d'accès ne permet pas le parcours. (Consultez aussi path_resolution(7).)
The argument path points outside the process's allocated address space.
L'argument length dépasse la taille maximum d'un fichier.
Alors qu'il était bloqué en attente de fin, l'appel a été interrompu par un gestionnaire de signal ; consultez fcntl(2) et signal(7).
L'argument length est négatif ou plus grand que la taille maximale d'un fichier.
Une erreur d'entrée-sortie bas niveau s'est produite.
Le fichier est en réalité un répertoire.
Trop de liens symboliques ont été rencontrés en parcourant le chemin.
Un composant du chemin dépasse 255 caractères ou le chemin complet dépasse 1023 caractères.
Le fichier indiqué n'existe pas.
Un élément du chemin d'accès n'est pas un répertoire.
Le système de fichiers ne permet pas d'agrandir un fichier au-delà de sa taille actuelle.
La lecture a été interrompue par un signal ; consultez fnctl(2).
Le fichier indiqué réside sur un système de fichiers en lecture seule.
The file is an executable file that is being executed.

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 :

fd n'est pas un descripteur de fichier valable.
fd n'est pas ouvert en écriture.
fd does not reference a regular file or a POSIX shared memory object.
The file descriptor fd is not open for writing. POSIX permits, and portable applications should handle, either error for this case. (Linux produces EINVAL.)

POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).

ftruncate() can also be used to set the size of a POSIX shared memory object; see shm_open(3).

Les détails dans la section DESCRIPTION sont ceux de systèmes compatibles XSI. Pour les systèmes non compatibles, la norme 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.

Les appels système truncate() et ftruncate() originaux de Linux n'ont pas été conçus pour gérer les positions dans des fichiers de très grosse taille. En conséquence, Linux 2.4 a ajouté les appels système truncate64() et ftruncate64() qui permettent de gérer de gros fichiers. Cependant, ces détails peuvent être ignorés par les applications qui utilisent la glibc, car ses fonctions encapsulent de manière transparente les appels système les plus récents disponibles.

Sur certaines architectures 32 bits, la signature d'appel de ces appels système est différente, pour les raisons expliquées dans syscall(2).

Un bogue dans les en‐têtes de la glibc 2.12 fait que la valeur minimale de _POSIX_C_SOURCE requise pour exposer la déclaration ftruncate() était 200809L au lieu de 200112L. Ce bogue a été corrigé dans les versions ultérieures de la glibc.

truncate(1), open(2), stat(2), path_resolution(7)

Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

6 mars 2019 Linux