Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

       io_submit - Soumettre un bloc d'entrées-sorties asynchrones

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

       Sinon, la bibliothèque d'E/S asynchrones ((libaio, -laio) ; voir les NOTES.

SYNOPSIS

       #include <linux/aio_abi.h>          /* Définit les types nécessaires */

       int io_submit(aio_context_t ctx_id, long nr, struct iocb **iocbpp);

       Note : il n'existe pas d'enveloppe pour cet appel système dans la glibc ; voir NOTES.

DESCRIPTION

       Remarque :  cette  page  décrit  l'interface  de  l'appel  système Linux brut. La fonction
       enveloppe fournie par libaio utilise un type différent pour le paramètre ctx_id. Voir  les
       NOTES.

       L'appel système io_submit() enregistre nr requêtes d'entrées-sorties asynchrones pour être
       traitées dans le contexte ctx_id. L'argument iocbpp devrait être une table de nr blocs  de
       contrôle, qui seront soumis au contexte ctx_id.

       La  structure  iocb  (bloc  de  contrôle  d'E/S) définie dans linux/aio_abi.h spécifie les
       paramètres contrôlant les opérations d'E/S.

           #include <linux/aio_abi.h>

           struct iocb {
               __u64   aio_data;
               __u32   PADDED(aio_key, aio_rw_flags);
               __u16   aio_lio_opcode;
               __s16   aio_reqprio;
               __u32   aio_fildes;
               __u64   aio_buf;
               __u64   aio_nbytes;
               __s64   aio_offset;
               __u64   aio_reserved2;
               __u32   aio_flags;
               __u32   aio_resfd;
           };

       Les membres de cette structure sont les suivants :

       aio_data
              Ces données sont copiées  dans  le  champ  data  de  la  structure  io_event  à  la
              complétion des E/S (voir io_getevents(2)).

       aio_key
              Il  s'agit  d'un  champ  interne  utilisé par le noyau. Il ne doit pas être modifié
              après un appel à io_submit().

       aio_rw_flags
              Cela définit les options R/W passées  avec  la  structure.  Les  valeurs  acceptées
              sont :

              RWF_APPEND (depuis Linux 4.16)
                     Ajouter  des données à la fin du fichier. Voir la description de l'option du
                     même nom dans pwritev2(2) ainsi que la description de O_APPEND dans open(2).
                     Le champ aio_offset est ignoré. Le décalage du fichier est inchangé.

              RWF_DSYNC (depuis Linux 4.13)
                     Opération  d'écriture  complète  respectant  l'intégrité  des  données d'E/S
                     synchronisées. Voir la description de l'option du même nom dans  pwritev2(2)
                     ainsi que celle de O_DSYNC dans open(2).

              RWF_HIPRI (depuis Linux 4.13)
                     Requête de haute priorité, scruter (« poll ») si possible

              RWF_NOWAIT (depuis Linux 4.14)
                     Ne  pas  attendre  si  les  E/S  bloquent pour les opérations telles que les
                     allocations de blocs de fichiers, la purge de pages sales  (« dirty »),  les
                     verrous  mutex ou un périphérique de bloc congestionné dans le noyau. Si une
                     de ces conditions est remplie, le bloc de contrôle est renvoyé immédiatement
                     avec  la valeur de retour -EAGAIN dans le champ res de la structure io_event
                     (voir io_getevents(2)).

              RWF_SYNC (depuis Linux 4.13)
                     Opération d'écriture  complète  respectant  l'intégrité  des  données  d'E/S
                     synchronisées.  Voir la description de l'option du même nom dans pwritev2(2)
                     ainsi que celle de O_SYNC dans open(2).

       aio_lio_opcode
              Cela définit le type d'E/S à exécuter par la structure iocb. Les valeurs  acceptées
              sont définies par l'enum spécifiée dans linux/aio_abi.h :

                  enum {
                      IOCB_CMD_PREAD = 0,
                      IOCB_CMD_PWRITE = 1,
                      IOCB_CMD_FSYNC = 2,
                      IOCB_CMD_FDSYNC = 3,
                      IOCB_CMD_POLL = 5,
                      IOCB_CMD_NOOP = 6,
                      IOCB_CMD_PREADV = 7,
                      IOCB_CMD_PWRITEV = 8,
                  };

       aio_reqprio
              Cela définit la priorité des requêtes.

       aio_fildes
              Le descripteur du fichier sur lequel les opérations d'E/S sont à réaliser.

       aio_buf
              Le  tampon  utilisé  pour  le  transfert  de  données  des opérations de lecture ou
              d'écriture.

       aio_nbytes
              La taille du tampon pointé par aio_buf.

       aio_offset
              La position dans le fichier où les opérations d'E/S sont à réaliser.

       aio_flags
              Il s'agit de l'ensemble d'attributs associés  à  la  structure  iocb.  Les  valeurs
              acceptées sont :

              IOCB_FLAG_RESFD
                     Le  contrôle  asynchrone  des  E/S  doit  signaler le descripteur de fichier
                     mentionné dans aio_resfd à la complétion.

              IOCB_FLAG_IOPRIO (depuis Linux 4.18)
                     Interpréter le champ aio_reqprio comme une IOPRIO_VALUE  telle  que  définie
                     par linux/ioprio.h.

       aio_resfd
              Le descripteur de fichier à signaler en cas de fin d'opération d'E/S asynchrone.

VALEUR RENVOYÉE

       En  cas  de  succès,  io_submit()  renvoie  le  nombre de blocs iocb soumis (qui peut être
       inférieur à nr ou 0 si nr vaut zéro). Pour les valeurs de retour en cas d'échec, consultez
       la section NOTES.

ERREURS

       EAGAIN Pas assez de ressources pour enregistrer un iocb.

       EBADF  Le descripteur de fichier dans le premier iocb n’est pas valable.

       EFAULT L'une des structures de données pointe sur une zone invalide.

       EINVAL Le  contexte  d’E/S  asynchrones  indiqué  par  ctx_id  n'est  pas  valable. nr est
              inférieur à zéro. L'iocb à l'adresse *iocbpp[0] n'est pas initialisé  correctement,
              l'opération  précisée  n'est pas valable pour le descripteur de fichier dans l’iocb
              ou la valeur dans le champ aio_reqprio n’est pas autorisée .

       ENOSYS io_submit() n'est pas implémenté dans cette architecture.

       EPERM  Le champ aio_reqprio  est  positionné  avec  la  classe  IOPRIO_CLASS_RT,  mais  le
              contexte soumettant n'a pas la capacité CAP_SYS_ADMIN.

VERSIONS

       Les appels système d'entrées-sorties asynchrones sont apparus dans Linux 2.5.

STANDARDS

       io_submit()  est  spécifique  à  Linux  et  ne  doit  pas être utilisé dans des programmes
       destinés à être portables.

NOTES

       La glibc ne fournit pas de fonction autour de cet appel système. Vous pourriez  l'invoquer
       en  utilisant  syscall(2),  mais vous préférerez sans doute utiliser la fonction enveloppe
       io_submit() fournie par libaio.

       Remarquez que la fonction d'enveloppe libaio utilise un  autre  type  (io_context_t)  pour
       l'argument  ctx_id. Remarquez également que l'enveloppe libaio ne suit pas les conventions
       classiques de la bibliothèque C concernant l'indication des erreurs : en cas d'erreur,  la
       fonction renvoie un nombre négatif (la valeur négative de l'une des valeurs indiquées dans
       la section ERREURS). Si l'appel système est invoqué avec syscall(2), la valeur  de  renvoi
       suit  les  conventions  classiques  pour  indiquer  l'erreur : -1, avec errno défini à une
       valeur (positive) de l'erreur.

VOIR AUSSI

       io_cancel(2), io_destroy(2), io_getevents(2), io_setup(2), aio(7)

TRADUCTION

       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>,  David  Prévot <david@tilapin.org> et Jean-Philippe MENGUAL
       <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.