posix_fallocate - Allouer de l'espace pour un fichier
Bibliothèque C standard (
libc,
-lc)
#include <fcntl.h>
int posix_fallocate(int fd, off_t offset, off_t len);
posix_fallocate() :
_POSIX_C_SOURCE >= 200112L
La fonction
posix_fallocate() assure l'allocation d'espace disque pour le
fichier référencé par le descripteur
fd pour les
octets dans l'intervalle commençant à
offset et
s'étendant sur
len octets. Après un appel réussi
à
posix_fallocate(), toute écriture ultérieure
dans l'intervalle spécifié est garantie de ne pas échouer
à cause d'un manque d'espace disque.
Si la taille du fichier est inférieure à
offset+
len,
le fichier est agrandi à cette taille ; autrement, la taille du
fichier n'est pas modifiée.
posix_fallocate() renvoie
0 si elle réussit et un
numéro d'erreur si elle échoue. Notez que
errno n'est pas
écrite.
- EBADF
-
fd n'est pas un descripteur de fichier valable ou
n'est pas ouvert en écriture.
- EFBIG
-
offset+len dépasse la taille maximale du
fichier.
- EINTR
- Un signal a été capturé pendant
l'exécution.
- EINVAL
-
offset était inférieur à 0,
len était inférieur ou égal à 0 ou le
système de fichiers sous-jacent ne prend par en charge
l'opération.
- ENODEV
-
fd ne fait pas référence à un
fichier régulier.
- 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.
- EOPNOTSUPP
- Le système de fichiers contenant le fichier
référencé par fd ne prend pas en charge cette
opération. Ce code d'erreur peut être retourné par
des bibliothèques C, comme musl libc, n'effectuant pas
l'émulation expliquée dans les NOTES.
- ESPIPE
-
fd fait référence à un
tube.
posix_fallocate() est disponible depuis la version 2.1.94 de la
glibc.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
posix_fallocate() |
Sécurité des threads |
MT-Safe (mais consultez les NOTES) |
POSIX.1-2001.
POSIX.1-2008 indique qu'une implémentation
doit renvoyer l'erreur
EINVAL si
len valait 0 ou si
offset était
inférieur à 0. POSIX.1-2001 indique qu'une implémentation
doit renvoyer l'erreur
EINVAL si
len est inférieur
à 0 ou si
offset est inférieur à 0 et
peut
renvoyer cette erreur si
len est égal à 0.
Dans l'implémentation de la glibc,
posix_fallocate() est
implémentée avec un appel à
fallocate(2) qui est
MT-safe. Si le système de fichiers sous-jacent ne prend pas
fallocate(2) en charge, alors l'opération est
émulée avec les réserves suivantes :
- •
- L'émulation n'est pas efficace.
- •
- Il y a une situation de compétition dans laquelle
des écritures concurrentes depuis un autre fil d'exécution
ou processus peuvent être réécrites avec des octets
NULL.
- •
- Il y a une situation de compétition dans laquelle
l'augmentation de la taille d'un fichier par un autre fil
d'exécution ou processus peut engendrer un fichier dont la taille
est inférieure à celle attendue.
- •
- Si fd a été ouvert avec les attributs
O_APPEND ou O_WRONLY, la fonction échoue avec
l'erreur EBADF.
L'émulation n'est en général pas MT-Safe. Sur Linux, les
applications peuvent utiliser
fallocate(2) lorsqu'elles ne peuvent
tolérer les réserves venant de l'émulation. En
général, cela n'est recommandé que si l'application
souhaite terminer l'opération si
EOPNOTSUPP est retourné.
Autrement, l'application doit elle-même implémenter une
méthode de secours avec les mêmes problèmes que ceux
fournis par la glibc.
fallocate(1),
fallocate(2),
lseek(2),
posix_fadvise(2)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Grégoire Scano <
[email protected]>
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 à
[email protected]