Sous-routine tronquée, truncate64, ftronate ou ftruncate64
Objectif
Modifie la longueur des fichiers réguliers ou de l'objet de mémoire partagée.
Bibliothèque
Bibliothèque C standard (libc.a)
Syntaxe
#include <unistd.h>
int ftruncate ( FileDescriptor, Length)
int FileDescriptor;
off_t Length;int ftruncate64 ( FileDescriptor, Length)
int FileDescriptor;
off64_t Length;Descriptif
Les sous-programmes Tronquer et Tronqué modifient la longueur des fichiers ordinaires ou de l'objet de mémoire partagée.
Le paramètre Chemin doit pointer vers un fichier ordinaire pour lequel le processus d'appel est autorisé en écriture. Le paramètre Longueur indique la longueur recherchée du nouveau fichier en octets.
Le paramètre Longueur mesure le fichier spécifié en octets à partir du début du fichier. Si la nouvelle longueur est inférieure à la longueur précédente, toutes les données entre la nouvelle longueur et la fin du fichier précédente sont supprimées. Si la nouvelle longueur du fichier spécifié est supérieure à la longueur précédente, les données entre les anciennes et les nouvelles longueurs sont lues comme des zéros. Les blocs complets sont renvoyés au système de fichiers pour qu'ils puissent être utilisés à nouveau, et la taille du fichier est remplacée par la valeur du paramètre Longueur .
Si le fichier désigné dans le paramètre Chemin nomme un lien symbolique, le lien est parcouru et la résolution du nom de chemin continue.
Ces sous-routines ne modifient pas le pointeur de recherche du fichier.
Ces sous-routines ne peuvent pas être appliquées à un fichier ouvert par un processus avec l'indicateur O_REPORT .
L'exécution réussie de la sous-routine truncate ou ftruncate met à jour les zones st_ctime et st_mtime du fichier. La réussite de l'opération efface également le bit SetUserID(S_ISUID) du fichier si l'une des conditions suivantes est remplie :
- Le processus appelant ne dispose pas des droits utilisateur root.
- L'ID utilisateur effectif du processus appelant ne correspond pas à l'ID utilisateur du fichier.
- Le fichier est exécutable par le groupe (S_IXGRP) ou d'autres (S_IXOTH).
Ces sous-programmes effacent également le bit SetGroupID(S_ISGID) si les conditions suivantes sont remplies :
- Le fichier ne correspond pas à l'ID de groupe effectif ou à l'un des ID de groupe supplémentaires du processus
- OR
- Le fichier est exécutable par le propriétaire (S_IXUSR) ou d'autres (S_IXOTH).Remarque : l'effacement des bits SetUserID et SetGroupID peut se produire même si le sous-programme échoue parce que les données du fichier ont été modifiées avant la détection de l'erreur.
Tronquer et Tronqué peuvent être utilisés pour spécifier n'importe quelle taille jusqu'à OFF_MAX. truncate64 et ftruncate64 peuvent être utilisés pour spécifier n'importe quelle longueur jusqu'à la taille maximale du fichier.
Dans l'environnement de programmation activé pour les fichiers volumineux, Tronquer est redéfini pour être truncate64 et Tronqué est redéfini pour être ftruncate64.
Paramètres
| Article | Descriptif |
|---|---|
| PATH | Indique le nom d'un fichier ouvert, tronqué, puis fermé. |
| FileDescriptor | Indique le descripteur d'un fichier ou d'un objet de mémoire partagée qui doit être ouvert pour écriture. |
| Length | Indique la nouvelle longueur du fichier tronqué en octets. |
Valeurs renvoyées
Une fois l'exécution terminée, la valeur 0 est renvoyée. Si la sous-routine Tronquer ou Tronqué n'aboutit pas, une valeur de -1 est renvoyée et la variable globale Errno est définie pour indiquer la nature de l'erreur.
Codes d'erreur
Les sous-routines Tronquer et Tronqué échouent si les informations suivantes sont vraies:
| Article | Descriptif |
|---|---|
| EROFS | Une tentative a été effectuée pour tronquer un fichier qui occupe un système de fichiers en lecture seule. |
Les sous-routines Tronquer et Tronqué échouent si l'une des opérations suivantes est vraie:
| Article | Descriptif |
|---|---|
| ENCORE UNE FOIS | L'opération de troncature échoue lorsqu'un verrou en écriture forcée se trouve sur une partie du fichier qui est tronqué. Etant donné que le fichier cible a été ouvert avec les indicateurs O_NONBLOCK ou O_NDELAY , le sous-programme échoue immédiatement au lieu d'attendre une mise en production. |
| EDQUOT | Les nouveaux blocs de disque ne peuvent pas être alloués pour le fichier tronqué. Le quota des blocs de disques attribués à l'utilisateur ou au groupe a été épuisé sur le système de fichiers cible. |
| EFBIG | Une tentative d'écriture d'un fichier qui dépasse la limite de taille de fichier du processus ou la taille maximale du fichier a été effectuée. Si la variable d'environnement utilisateur XPG_SUS_ENV = SUR est définie avant l'exécution du processus, le signal SIGXFSZ est affecté au processus lorsqu'il dépasse la limite de taille de fichier du processus. |
| EFBIG | Le fichier est un fichier standard et Longueur est supérieur au maximum de décalage établi dans la description de fichier ouvert associée à Congés. |
| EINVAL | Le fichier n'est pas un fichier standard. |
| EINVAL | Le paramètre Longueur était inférieur à zéro. |
| EISDIR | Le fichier nommé est un répertoire. |
| EINTR | Un signal a été intercepté lors de l'exécution. |
| EIO | Une erreur d'E-S s'est produite lors de la lecture ou de l'écriture dans le système de fichiers. |
| EMFICHIER | Le fichier est ouvert avec O_REPORT par un ou plusieurs processus. |
| ENOSPC | Les nouveaux blocs de disque ne peuvent pas être alloués pour le fichier tronqué. Il n'y a pas d'espace disponible sur le système de fichiers qui contient le fichier. |
| ETXTBSY | Le fichier fait partie d'un processus en cours d'exécution. |
| EROFS | Le fichier nommé occupe un système de fichiers en lecture seule. |
- Le sous-programme Tronquer peut également être infructueux pour d'autres raisons. Pour obtenir la liste des erreurs supplémentaires, voir Codes d'erreur du système d'exploitation de base pour les services nécessitant une résolution de nom de chemin.
- Le sous-programme Tronquer peut renvoyer les mêmes erreurs que la sous-routine Ouvert si un incident se produit pendant l'ouverture du fichier.
La sous-routine Tronqué échoue si les informations suivantes sont vraies:
| Article | Descriptif |
|---|---|
| EBADF | Le paramètre FileDescriptor n'est pas un descripteur de fichier valide ouvert en écriture. |
| EINVAL | L'argument FileDescriptor fait référence à un fichier ouvert sans droit d'accès en écriture. |
La fonction Tronquer échoue si les conditions suivantes sont remplies:
| Article | Descriptif |
|---|---|
| EACCES | Un composant du préfixe de chemin refuse le droit de recherche ou le droit d'accès en écriture est refusé dans le fichier. |
| EISDIR | Le fichier nommé est un répertoire. |
| ELOOP | Trop de liens symboliques ont été rencontrés lors de la résolution de Chemin. |
| ENAMETOOLONG | La longueur du nom de chemin spécifié dépasse CHEMIN_MAX octets, ou la longueur d'un composant du nom de chemin dépasse NOM_MAX octets. |
| ENOENT | Un composant de Chemin ne nom pas un fichier existant ou Chemin est une chaîne vide. |
| RÉP. | Un composant du préfixe de chemin d'accès Chemin n'est pas un répertoire. |
| EROFS | Le fichier nommé occupe un système de fichiers en lecture seule. |
La fonction Tronquer échoue si les informations suivantes sont vraies:
| Article | Descriptif |
|---|---|
| ENAMETOOLONG | La résolution du nom de chemin d'un lien symbolique a produit un résultat intermédiaire dont la longueur dépasse CHEMIN_MAX. |