aio_write - Écriture asynchrone
Bibliothèque de temps réel (
librt,
-lrt)
#include <aio.h>
int aio_write(struct aiocb *aiocbp);
La fonction
aio_write() met en file d'attente la requête d'E/S
décrite par le tampon pointé par
aiocbp. Cette fonction
est la version asynchrone de
write(2). Les paramètres de l'appel
sont
write(fd, buf, count)
correspondent (dans l'ordre) au membre
aio_fildes,
aio_buf et
aio_nbytes de la structure pointée par
aiocbp. Consultez
aio(7) pour une description de la structure
aiocb.
Si
O_APPEND n'est pas défini, la donnée est écrite
en commençant à la position absolue
aiocbp->aio_offset, quelle que soit la position actuelle dans le
fichier. Si
O_APPEND est défini, les données sont
écrites à la fin du fichier dans le même ordre que
aio_write(). Après cet appel, la valeur de la position
« courante » dans le fichier est indéfinie.
« Asynchrone » signifie que cet appel se termine
aussitôt que la requête a été mise dans la file
d'attente ; l'écriture peut être ou ne pas être
achevée lorsque l'appel termine. On peut tester cet achèvement
en utilisant
aio_error(3). La valeur de retour d'une opération
d'E/S terminée peut être obtenue avec
aio_return(3). La
notification asynchrone de la fin de l'E/S peut être obtenue en
définissant
aiocbp->aio_sigevent de façon
appropriée. Consultez
sigevent(7) pour plus de détails.
Si
_POSIX_PRIORITIZED_IO est définie et si le fichier le
gère, l'opération asynchrone est soumise à une
priorité égale à celle du processus appelant moins
aiocbp->aio_reqprio.
Le membre
aiocbp->aio_lio_opcode est ignoré.
Aucune donnée n'est écrite dans un fichier normal au-delà
de son décalage maximum.
En cas de réussite,
0 est renvoyé. En cas d'erreur, la
requête n'est pas mise dans la file d'attente,
-1 est
renvoyé et
errno est positionnée pour indiquer l'erreur.
Si une erreur est détectée plus tard, elle sera signalée
à l'aide de
aio_return(3) (état de
retour
-1) et
aio_error(3) (état d'erreur :
tout ce qu'on veut, récupéré dans
errno, comme
EBADF).
- EAGAIN
- Ressources insuffisantes.
- EBADF
-
aio_fildes n'est pas un descripteur de fichier
valable ouvert en écriture.
- EFBIG
- Le fichier est un fichier normal, nous voulons
écrire au moins un octet, mais la position de départ est
égale ou au-delà du décalage maximum du fichier.
- EINVAL
- Une ou plusieurs valeurs parmi aio_offset,
aio_reqprio, aio_nbytes ne sont pas valables.
- ENOSYS
-
aio_write() n'est pas implémenté.
La fonction
aio_write() est disponible depuis la glibc 2.1.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
aio_write() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
C'est une bonne idée de mettre à zéro le bloc de
contrôle avant de l'utiliser. Ce bloc de contrôle ne doit pas
être modifié pendant l'opération d'écriture. Il ne
faut pas accéder à la zone tampon à écrire pendant
l'opération car des résultats indéfinis peuvent survenir.
Les zones mémoires atteintes doivent rester valables.
Des opérations d'E/S simultanées spécifiant la même
structure
aiocb produisent des résultats indéfinis.
aio_cancel(3),
aio_error(3),
aio_fsync(3),
aio_read(3),
aio_return(3),
aio_suspend(3),
lio_listio(3),
aio(7)
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
Thomas Vincent <
[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]