NOM¶
fallocate - Manipuler un espace de fichier
SYNOPSIS¶
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <fcntl.h>
int fallocate(int fd, int mode, off_t offset, off_t len);
DESCRIPTION¶
C'est un appel système spécifique à Linux et non portable.
Pour la méthode portable, spécifiée par POSIX.1, pour
assurer que de l'espace est alloué pour un fichier, consultez
posix_fallocate(3).
fallocate() permet à l'appelant de manipuler directement l'espace
disque alloué pour le fichier référencé par
fd pour la plage d'octets débutant à
offset et de
longueur
len octets.
Le paramètre
mode définit l'opération à
effectuer sur la plage donnée. Les sous-sections suivantes apportent
des précisions sur les opérations prises en charge.
Allocation d'espace disque.¶
L'opération par défaut (c'est-à-dire si
mode est
zéro) de
fallocate() alloue l'espace disque dans l'intervalle
indiqué par
offset et
len. La taille du fichier (comme
indiquée par
stat(2)) sera modifiée si
offset+
len est supérieur à la taille du fichier.
Toute sous-région dans l'intervalle indiqué par
offset et
len sera initialisée à zéro si elle ne contient
pas de données au moment de l'appel. Ce comportement par défaut
ressemble beaucoup au comportement de la fonction de bibliothèque
posix_fallocate(3), et est conçu comme une méthode
d'implémentation optimisée de cette fonction.
Après un appel réussi, les écritures suivantes dans
l'intervalle indiqué par
offset et
len seront garanties
sans échec dû à un manque d'espace disque.
Si l'attribut
FALLOC_FL_KEEP_SIZE est indiqué dans
mode, le
comportement de l'appel est similaire, mais la taille du fichier ne sera pas
modifiée si
offset+
len est supérieur à la
taille du fichier. L'allocation préalable de blocs mis à
zéro après la fin du fichier de cette façon permet
d'optimiser la charge de travail d'ajout.
Parce que l'allocation est effectuée en fragments de taille de blocs,
fallocate() peut allouer un espace de disque plus grand que celui qui a
été indiqué.
Désallocation d'espace de fichier¶
Indiquer le paramètre
FALLOC_FL_PUNCH_HOLE (disponible depuis
Linux 2.6.38) dans
mode désalloue l'espace
(c'est-à-dire crée un trou) dans l'intervalle d'octets
commençant à
offset et continuant pendant
len octets. Dans l'espace indiqué, les blocs partiels de
systèmes de fichiers sont mis à zéro et les blocs
complets de systèmes de fichiers sont retirés du fichier.
Après un appel réussi, les lectures suivantes dans cet
intervalle renverront des zéros.
Le paramètre
FALLOC_FL_PUNCH_HOLE doit être inclus avec
FALLOC_FL_KEEP_SIZE dans
mode (avec un OU binaire) ;
autrement dit, même en faisant des trous après la fin du
fichier, la taille du fichier (comme indiquée par
stat(2)) ne
changera pas.
Les systèmes de fichiers ne prennent pas tous
FALLOC_FL_PUNCH_HOLE
en charge ; si un système de fichiers n'accepte pas
l'opération, une erreur est renvoyée. L'opération est
prise en charge notamment par les systèmes de fichiers
suivants :
- *
- XFS (depuis Linux 2.6.38)
- *
- ext4 (depuis Linux 3.0)
- *
- Btrfs (depuis Linux 3.7)
- *
- tmpfs (depuis Linux 3.5)
Réduction d'espace de fichier¶
Indiquer le paramètre
FALLOC_FL_COLLAPSE_RANGE (disponible depuis
Linux 3.15) dans
mode supprime un intervalle d'octets d'un
fichier sans laisser de trou. L'intervalle commence à
offset et
continue pendant
len octets. Une fois l'opération
terminée, les contenus du fichier au-délà de
offset+len seront déplacés à l'emplacement
offset, le fichier sera alors alors
len octets plus
court.
Un système de fichier peut limiter la granularité de
l'opération, pour conserver une mise en œuvre efficace.
Typiquement,
offset et
len doivent être multiples de la
taille de bloc du système de fichier, qui est fonction du type de
système de fichier et de sa configuration. Si cette exigence est
applicable au système de fichier mais n'est pas remplie,
fallocate() échouera avec l'erreur
EINVAL.
Si la plage définie par
offset et
len atteint ou
dépasse la fin du fichier, une erreur est renvoyée. Le fichier
devrait être tronqué avec
ftruncate(2).
Aucun autre attribut de ne peut être indiqué dans
mode en
plus de
FALLOC_FL_COLLAPSE_RANGE.
Linux 3.15 prend en charge
FALLOC_FL_COLLAPSE_RANGE pour ext4
(seulement pour les fichiers à base de domaines ou
« extent ») et XFS.
VALEUR RENVOYÉE¶
En cas de succès,
fallocate() renvoie 0. En cas d'erreur, -1 est
renvoyé et
errno contient le code d'erreur.
ERREURS¶
- EBADF
- fd n'est pas un descripteur de fichier valable ou n'est pas ouvert
en écriture.
- EFBIG
- offset+len excède la taille maximum de fichier.
- EINTR
- Un signal a été capturé pendant
l'exécution.
- EINVAL
- offset était inférieur à 0, ou len
était inférieur ou égal à 0.
- EINVAL
- mode vaut FALLOC_FL_COLLAPSE_RANGE et la plage
indiquée par offset et len atteint ou dépasse
la fin du fichier.
- EINVAL
- mode vaut FALLOC_FL_COLLAPSE_RANGE, mais offset ou
len n'est pas un multiple de la taille du bloc du système de
fichiers.
- EINVAL
- mode contient FALLOC_FL_COLLAPSE_RANGE ainsi que d'autres
attributs, mais aucun autre attribut n'est autorisé avec
FALLOC_FL_COLLAPSE_RANGE.
- EINVAL
- mode vaut FALLOC_FL_COLLAPSE_RANGE, mais le fichier
référencé par fd n'est pas un fichier
normal.
- EIO
- Une erreur d'entrée-sortie s'est produite durant la lecture ou
l'écriture sur un système de fichiers.
- ENODEV
- fd ne fait pas référence à un fichier
régulier ou un répertoire (si fd est un tube ou une
FIFO, une erreur différente en résultera).
- ENOSPC
- Il n'y a pas suffisamment d'espace disponible sur le
périphérique où se trouve le fichier
référencé par fd.
- ENOSYS
- Ce noyau ne met pas en œuvre fallocate().
- EOPNOTSUPP
- Le système de fichiers contenant le fichier
référencé par fd ne gère pas cette
opération, ou le mode n'est pas pris en charge par le
système de fichiers contenant le fichier
référencé par fd.
- EPERM
- Le fichier indiqué par fd est marqué immuable
(consultez chattr(1)). Ou : mode indique
FALLOC_FL_PUNCH_HOLE ou FALLOC_FL_COLLAPSE_RANGE et le
fichier indiqué par fd est marqué en ajout uniquement
(consulter chattr(1)).
- ESPIPE
- fd fait référence à un tube ou une FIFO.
- ETXTBSY
- mode indique FALLOC_FL_COLLAPSE_RANGE, mais le fichier
référencé par fd est en cours
d'exécution.
VERSIONS¶
fallocate() est disponible dans Linux depuis le noyau 2.6.23. La glibc le
prend en charge depuis la version 2.10. Les paramètres
FALLOC_FL_* ne sont définis dans les en-têtes de la glibc
que depuis la version 2.18.
fallocate() est spécifique à Linux.
VOIR AUSSI¶
fallocate(1),
ftruncate(2),
posix_fadvise(3),
posix_fallocate(3)
COLOPHON¶
Cette page fait partie de la publication 3.65 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Julien Cristau et l'équipe francophone de traduction de
Debian (2006-2009).
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> ».