# French translation of manpages # This file is distributed under the same license as the manpages-l10n package. # Copyright © of this file: # Christophe Blaess , 1996-2003. # Stéphan Rafin , 2002. # Thierry Vignaud , 1999, 2002. # François Micaux, 2002. # Alain Portal , 2003-2008. # Jean-Philippe Guérard , 2005-2006. # Jean-Luc Coulon (f5ibh) , 2006-2007. # Julien Cristau , 2006-2007. # Thomas Huriaux , 2006-2008. # Nicolas François , 2006-2008. # Florentin Duneau , 2006-2010. # Simon Paillard , 2006. # Denis Barbier , 2006, 2010. # David Prévot , 2010, 2012, 2013. # Thomas Vincent , 2018. # Jean-Pierre Giraud , 2021-2024. msgid "" msgstr "" "Project-Id-Version: manpages-l10n\n" "POT-Creation-Date: 2024-06-01 05:41+0200\n" "PO-Revision-Date: 2024-02-18 00:36+0100\n" "Last-Translator: Jean-Pierre Giraud \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Lokalize 22.12.1\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "AIO" msgstr "AIO" #. type: TH #: archlinux debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "2 mai 2024" #. type: TH #: archlinux debian-unstable #, no-wrap msgid "Linux man-pages 6.8" msgstr "Pages du manuel de Linux 6.8" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "NOM" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "aio - POSIX asynchronous I/O overview" msgstr "aio - Vue d'ensemble des entrées-sorties (E/S) asynchrones POSIX" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "DESCRIPTION" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The POSIX asynchronous I/O (AIO) interface allows applications to initiate " "one or more I/O operations that are performed asynchronously (i.e., in the " "background). The application can elect to be notified of completion of the " "I/O operation in a variety of ways: by delivery of a signal, by " "instantiation of a thread, or no notification at all." msgstr "" "L'interface d'E/S asynchrones (AIO pour « asynchronous I/O ») POSIX permet " "aux applications de déclencher une ou plusieurs opérations d'E/S réalisées " "de façon asynchrone (c'est-à-dire en arrière-plan). La fin d'une opération " "d'E/S peut être notifiée à l'application de différentes façons au choix : " "distribution d'un signal, instanciation d'un thread ou absence de " "notification." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The POSIX AIO interface consists of the following functions:" msgstr "L'interface AIO POSIX est composée des fonctions suivantes :" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Enqueue a read request. This is the asynchronous analog of B(2)." msgstr "" "Placer en file d'attente une requête de lecture. C'est l'équivalent " "asynchrone de B(2)." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Enqueue a write request. This is the asynchronous analog of B(2)." msgstr "" "Placer en file d'attente une requête d'écriture. C'est l'équivalent " "asynchrone de B(2)." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Enqueue a sync request for the I/O operations on a file descriptor. This is " "the asynchronous analog of B(2) and B(2)." msgstr "" "Placer en file d'attente une requête de synchronisation pour des opérations " "d'E/S sur un descripteur de fichier. C'est l'équivalent asynchrone de " "B(2) et B(2)." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Obtain the error status of an enqueued I/O request." msgstr "Obtenir l'état d'erreur d'une requête d'E/S placée en file d'attente." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Obtain the return status of a completed I/O request." msgstr "Obtenir l'état de retour d'une requête d'E/S terminée." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Suspend the caller until one or more of a specified set of I/O requests " "completes." msgstr "" "Suspendre l'appelant jusqu'à la fin d'une ou plusieurs requêtes d'E/S d'un " "ensemble indiqué." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Attempt to cancel outstanding I/O requests on a specified file descriptor." msgstr "" "Essayer d'annuler des requêtes d'E/S en cours sur un descripteur de fichier " "indiqué." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Enqueue multiple I/O requests using a single function call." msgstr "" "Placer en file d'attente plusieurs requêtes d'E/S à partir d'un seul appel " "de fonction." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I (\"asynchronous I/O control block\") structure defines " "parameters that control an I/O operation. An argument of this type is " "employed with all of the functions listed above. This structure has the " "following form:" msgstr "" "La structure I (« asynchronous I/O control block », ou bloc de " "contrôle d'E/S asynchrones) définit les paramètres de contrôle d'une " "opération d'E/S. Un argument de ce type est utilisé avec toutes les " "fonctions précédentes. Cette structure est de la forme suivante :" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "" "#include Eaiocb.hE\n" "\\&\n" "struct aiocb {\n" " /* The order of these fields is implementation-dependent */\n" "\\&\n" " int aio_fildes; /* File descriptor */\n" " off_t aio_offset; /* File offset */\n" " volatile void *aio_buf; /* Location of buffer */\n" " size_t aio_nbytes; /* Length of transfer */\n" " int aio_reqprio; /* Request priority */\n" " struct sigevent aio_sigevent; /* Notification method */\n" " int aio_lio_opcode; /* Operation to be performed;\n" " lio_listio() only */\n" "\\&\n" " /* Various implementation-internal fields not shown */\n" "};\n" "\\&\n" "/* Operation codes for \\[aq]aio_lio_opcode\\[aq]: */\n" "\\&\n" "enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" msgstr "" "#include Eaiocb.hE\n" "\\&\n" "struct aiocb {\n" " /* L'ordre de ces champs dépend de l'implémentation */\n" "\\&\n" " int aio_fildes; /* Descripteur de fichier */\n" " off_t aio_offset; /* Position dans le fichier */\n" " volatile void *aio_buf; /* Emplacement du tampon */\n" " size_t aio_nbytes; /* Longueur de transfert */\n" " int aio_reqprio; /* Priorité de requête */\n" " struct sigevent aio_sigevent; /* Méthode de notification */\n" " int aio_lio_opcode; /* Opération à réaliser ;\n" " lio_listio() seulement */\n" "\\&\n" " /* Divers champs internes à l'implémentation ne sont pas montrés */\n" "};\n" "\\&\n" "/* Codes opératoires pour « aio_lio_opcode » : */\n" "\\&\n" "enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The fields of this structure are as follows:" msgstr "Les membres de cette structure sont les suivants :" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The file descriptor on which the I/O operation is to be performed." msgstr "" "Le descripteur du fichier sur lequel les opérations d'E/S sont à réaliser." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "This is the file offset at which the I/O operation is to be performed." msgstr "La position dans le fichier où les opérations d'E/S sont à réaliser." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "This is the buffer used to transfer data for a read or write operation." msgstr "" "Le tampon utilisé pour le transfert de données des opérations de lecture ou " "d'écriture." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "This is the size of the buffer pointed to by I." msgstr "La taille du tampon pointé par I." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This field specifies a value that is subtracted from the calling thread's " "real-time priority in order to determine the priority for execution of this " "I/O request (see B(3)). The specified value must be " "between 0 and the value returned by I. " "This field is ignored for file synchronization operations." msgstr "" "Valeur à soustraire de la priorité temps-réel du thread de l'appelant pour " "déterminer la priorité d'exécution de cette requête d'E/S (consultez " "B(3)). La valeur indiquée doit être entre 0 et la " "valeur renvoyée par I. Ce champ est ignoré " "lors des opérations de synchronisation de fichier." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed msgid "" "This field is a structure that specifies how the caller is to be notified " "when the asynchronous I/O operation completes. Possible values for " "I are B, B, and " "B. See B(3type) for further details." msgstr "" "Structure indiquant comment l'appelant sera notifié de la fin d'une " "opération d'E/S asynchrone. Les valeurs de I " "peuvent être B, B et B. Consultez " "B(3type) pour plus de précisions." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The type of operation to be performed; used only for B(3)." msgstr "" "Le type d'opération à réaliser, utilisé seulement pour B(3)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In addition to the standard functions listed above, the GNU C library " "provides the following extension to the POSIX AIO API:" msgstr "" "En plus des fonctions standard précédentes, la bibliothèque C du projet GNU " "fournit l'extension suivante à l'API AIO POSIX :" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(3)" msgstr "B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Set parameters for tuning the behavior of the glibc POSIX AIO implementation." msgstr "" "Configurer les paramètres pour régler le comportement de l'implémentation " "AIO POSIX de la glibc." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "ERRORS" msgstr "ERREURS" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I field of the I structure was less than 0, or was " "greater than the limit returned by the call " "I." msgstr "" "Le champ I de la structure I était inférieur à 0 ou " "supérieur à la limite renvoyée par l'appel " "I." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "STANDARDS" msgstr "STANDARDS" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "POSIX.1-2008." msgstr "POSIX.1-2008." #. type: SH #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "HISTORY" msgstr "HISTORIQUE" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "POSIX.1-2001. glibc 2.1." msgstr "POSIX.1-2001. glibc 2.1." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NOTES" msgstr "NOTES" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "It is a good idea to zero out the control block buffer before use (see " "B(3)). The control block buffer and the buffer pointed to by " "I must not be changed while the I/O operation is in progress. " "These buffers must remain valid until the I/O operation completes." msgstr "" "Il est conseillé de mettre à zéro le tampon de bloc de contrôle avant " "utilisation (consultez B(3)). Le tampon de bloc de contrôle et le " "tampon pointé par I ne doivent pas être modifiés pendant " "l'exécution d'une opération d'E/S. Ces tampons doivent rester valables " "jusqu'à la fin de l'opération d'E/S." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Simultaneous asynchronous read or write operations using the same I " "structure yield undefined results." msgstr "" "Les opérations de lecture ou d'écriture asynchrones simultanées qui " "utilisent la même structure I produisent des résultats indéfinis." #. http://lse.sourceforge.net/io/aio.html #. http://lse.sourceforge.net/io/aionotes.txt #. http://lwn.net/Articles/148755/ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The current Linux POSIX AIO implementation is provided in user space by " "glibc. This has a number of limitations, most notably that maintaining " "multiple threads to perform I/O operations is expensive and scales poorly. " "Work has been in progress for some time on a kernel state-machine-based " "implementation of asynchronous I/O (see B(2), B(2), " "B(2), B(2), B(2)), but this " "implementation hasn't yet matured to the point where the POSIX AIO " "implementation can be completely reimplemented using the kernel system calls." msgstr "" "L'actuelle implémentation AIO POSIX de Linux est fournie en espace " "utilisateur par la glibc. De nombreuses limites existent, en particulier le " "maintien de plusieurs threads pour réaliser des opérations d'E/S est très " "coûteux et monte mal en charge. L'implémentation d'E/S asynchrones basée sur " "l'état de la machine est en travaux depuis un moment sur le noyau (consultez " "B(2), B(2), B(2), B(2), " "B(2)), mais cette implémentation n'a pas encore atteint le " "niveau où l'implémentation AIO POSIX peut être entièrement réimplémentée en " "utilisant les appels système du noyau." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "EXAMPLES" msgstr "EXEMPLES" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The program below opens each of the files named in its command-line " "arguments and queues a request on the resulting file descriptor using " "B(3). The program then loops, periodically monitoring each of the " "I/O operations that is still in progress using B(3). Each of the " "I/O requests is set up to provide notification by delivery of a signal. " "After all I/O requests have completed, the program retrieves their status " "using B(3)." msgstr "" "Le programme suivant ouvre chaque fichier nommé en argument de sa ligne de " "commande et place une requête sur le descripteur de fichier dans la file " "avec B(3). Le programme boucle ensuite, en surveillant " "périodiquement toutes les opérations d'E/S en cours avec B(3). " "Chaque requête d'E/S est configurée pour fournir une notification en " "distribuant un signal. Quand toutes les requêtes d'E/S sont terminées, le " "programme récupère leur état avec B(3)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B signal (generated by typing control-\\e) causes the program " "to request cancelation of each of the outstanding requests using " "B(3)." msgstr "" "Le signal B (créé en tapant Contrôle-\\e) provoque la demande " "d'annulation de chaque requête en cours avec B(3)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Here is an example of what we might see when running this program. In this " "example, the program queues two requests to standard input, and these are " "satisfied by two lines of input containing \"abc\" and \"x\"." msgstr "" "Voici un exemple de ce qui pourrait être affiché lors de l'exécution de ce " "programme. Dans cet exemple, le programme place en file d'attente deux " "requêtes sur l'entrée standard et deux lignes de saisie contenant « abc » et " "« x » y répondent." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "$ B<./a.out /dev/stdin /dev/stdin>\n" "opened /dev/stdin on descriptor 3\n" "opened /dev/stdin on descriptor 4\n" "aio_error():\n" " for request 0 (descriptor 3): In progress\n" " for request 1 (descriptor 4): In progress\n" "B\n" "I/O completion signal received\n" "aio_error():\n" " for request 0 (descriptor 3): I/O succeeded\n" " for request 1 (descriptor 4): In progress\n" "aio_error():\n" " for request 1 (descriptor 4): In progress\n" "B\n" "I/O completion signal received\n" "aio_error():\n" " for request 1 (descriptor 4): I/O succeeded\n" "All I/O requests completed\n" "aio_return():\n" " for request 0 (descriptor 3): 4\n" " for request 1 (descriptor 4): 2\n" msgstr "" "$ B<./a.out /dev/stdin /dev/stdin>\n" "/dev/stdin ouvert sur le descripteur 3\n" "/dev/stdin ouvert sur le descripteur 4\n" "aio_error():\n" " pour la requête 0 (descripteur 3) : En cours\n" " pour la requête 1 (descripteur 4) : En cours\n" "B\n" "Signal de fin d'E/S reçu\n" "aio_error():\n" " pour la requête 0 (descripteur 3) : E/S réussie\n" " pour la requête 1 (descripteur 4) : En cours\n" "aio_error():\n" " pour la requête 1 (descripteur 4) : En cours\n" "B\n" "Signal de fin d'E/S reçu\n" "aio_error():\n" " pour la requête 1 (descripteur 4) : E/S réussie\n" "Toutes les requêtes d'E/S sont terminées\n" "aio_return():\n" " pour la requête 0 (descripteur 3) : 4\n" " pour la requête 1 (descripteur 4) : 2\n" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Program source" msgstr "Source du programme" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "" "#include Efcntl.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" "#include Estdio.hE\n" "#include Eerrno.hE\n" "#include Eaio.hE\n" "#include Esignal.hE\n" "\\&\n" "#define BUF_SIZE 20 /* Size of buffers for read operations */\n" "\\&\n" "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n" "\\&\n" "struct ioRequest { /* Application-defined structure for tracking\n" " I/O requests */\n" " int reqNum;\n" " int status;\n" " struct aiocb *aiocbp;\n" "};\n" "\\&\n" "static volatile sig_atomic_t gotSIGQUIT = 0;\n" " /* On delivery of SIGQUIT, we attempt to\n" " cancel all outstanding I/O requests */\n" "\\&\n" "static void /* Handler for SIGQUIT */\n" "quitHandler(int sig)\n" "{\n" " gotSIGQUIT = 1;\n" "}\n" "\\&\n" "#define IO_SIGNAL SIGUSR1 /* Signal used to notify I/O completion */\n" "\\&\n" "static void /* Handler for I/O completion signal */\n" "aioSigHandler(int sig, siginfo_t *si, void *ucontext)\n" "{\n" " if (si-Esi_code == SI_ASYNCIO) {\n" " write(STDOUT_FILENO, \"I/O completion signal received\\en\", 31);\n" "\\&\n" " /* The corresponding ioRequest structure would be available as\n" " struct ioRequest *ioReq = si-Esi_value.sival_ptr;\n" " and the file descriptor would then be available via\n" " ioReq-Eaiocbp-Eaio_fildes */\n" " }\n" "}\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " struct sigaction sa;\n" " int s;\n" " int numReqs; /* Total number of queued I/O requests */\n" " int openReqs; /* Number of I/O requests still in progress */\n" "\\&\n" " if (argc E 2) {\n" " fprintf(stderr, \"Usage: %s EpathnameE EpathnameE...\\en\",\n" " argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " numReqs = argc - 1;\n" "\\&\n" " /* Allocate our arrays. */\n" "\\&\n" " struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));\n" " if (ioList == NULL)\n" " errExit(\"calloc\");\n" "\\&\n" " struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));\n" " if (aiocbList == NULL)\n" " errExit(\"calloc\");\n" "\\&\n" " /* Establish handlers for SIGQUIT and the I/O completion signal. */\n" "\\&\n" " sa.sa_flags = SA_RESTART;\n" " sigemptyset(&sa.sa_mask);\n" "\\&\n" " sa.sa_handler = quitHandler;\n" " if (sigaction(SIGQUIT, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" "\\&\n" " sa.sa_flags = SA_RESTART | SA_SIGINFO;\n" " sa.sa_sigaction = aioSigHandler;\n" " if (sigaction(IO_SIGNAL, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" "\\&\n" " /* Open each file specified on the command line, and queue\n" " a read request on the resulting file descriptor. */\n" "\\&\n" " for (size_t j = 0; j E numReqs; j++) {\n" " ioList[j].reqNum = j;\n" " ioList[j].status = EINPROGRESS;\n" " ioList[j].aiocbp = &aiocbList[j];\n" "\\&\n" " ioList[j].aiocbp-Eaio_fildes = open(argv[j + 1], O_RDONLY);\n" " if (ioList[j].aiocbp-Eaio_fildes == -1)\n" " errExit(\"open\");\n" " printf(\"opened %s on descriptor %d\\en\", argv[j + 1],\n" " ioList[j].aiocbp-Eaio_fildes);\n" "\\&\n" " ioList[j].aiocbp-Eaio_buf = malloc(BUF_SIZE);\n" " if (ioList[j].aiocbp-Eaio_buf == NULL)\n" " errExit(\"malloc\");\n" "\\&\n" " ioList[j].aiocbp-Eaio_nbytes = BUF_SIZE;\n" " ioList[j].aiocbp-Eaio_reqprio = 0;\n" " ioList[j].aiocbp-Eaio_offset = 0;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_notify = SIGEV_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_signo = IO_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_value.sival_ptr =\n" " &ioList[j];\n" "\\&\n" " s = aio_read(ioList[j].aiocbp);\n" " if (s == -1)\n" " errExit(\"aio_read\");\n" " }\n" "\\&\n" " openReqs = numReqs;\n" "\\&\n" " /* Loop, monitoring status of I/O requests. */\n" "\\&\n" " while (openReqs E 0) {\n" " sleep(3); /* Delay between each monitoring step */\n" "\\&\n" " if (gotSIGQUIT) {\n" "\\&\n" " /* On receipt of SIGQUIT, attempt to cancel each of the\n" " outstanding I/O requests, and display status returned\n" " from the cancelation requests. */\n" "\\&\n" " printf(\"got SIGQUIT; canceling I/O requests: \\en\");\n" "\\&\n" " for (size_t j = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" Request %zu on descriptor %d:\", j,\n" " ioList[j].aiocbp-Eaio_fildes);\n" " s = aio_cancel(ioList[j].aiocbp-Eaio_fildes,\n" " ioList[j].aiocbp);\n" " if (s == AIO_CANCELED)\n" " printf(\"I/O canceled\\en\");\n" " else if (s == AIO_NOTCANCELED)\n" " printf(\"I/O not canceled\\en\");\n" " else if (s == AIO_ALLDONE)\n" " printf(\"I/O all done\\en\");\n" " else\n" " perror(\"aio_cancel\");\n" " }\n" " }\n" "\\&\n" " gotSIGQUIT = 0;\n" " }\n" "\\&\n" " /* Check the status of each I/O request that is still\n" " in progress. */\n" "\\&\n" " printf(\"aio_error():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" for request %zu (descriptor %d): \",\n" " j, ioList[j].aiocbp-Eaio_fildes);\n" " ioList[j].status = aio_error(ioList[j].aiocbp);\n" "\\&\n" " switch (ioList[j].status) {\n" " case 0:\n" " printf(\"I/O succeeded\\en\");\n" " break;\n" " case EINPROGRESS:\n" " printf(\"In progress\\en\");\n" " break;\n" " case ECANCELED:\n" " printf(\"Canceled\\en\");\n" " break;\n" " default:\n" " perror(\"aio_error\");\n" " break;\n" " }\n" "\\&\n" " if (ioList[j].status != EINPROGRESS)\n" " openReqs--;\n" " }\n" " }\n" " }\n" "\\&\n" " printf(\"All I/O requests completed\\en\");\n" "\\&\n" " /* Check status return of all I/O requests. */\n" "\\&\n" " printf(\"aio_return():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " ssize_t s;\n" "\\&\n" " s = aio_return(ioList[j].aiocbp);\n" " printf(\" for request %zu (descriptor %d): %zd\\en\",\n" " j, ioList[j].aiocbp-Eaio_fildes, s);\n" " }\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" "#include Efcntl.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" "#include Estdio.hE\n" "#include Eerrno.hE\n" "#include Eaio.hE\n" "#include Esignal.hE\n" "\\&\n" "#define BUF_SIZE 20 /* Taille des tampons pour les opérations de lecture */\n" "\\&\n" "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n" "\\&\n" "struct ioRequest { /* Structure spécifique à l'application\n" " pour suivre les requêtes d'E/S */\n" " int reqNum;\n" " int status;\n" " struct aiocb *aiocbp;\n" "};\n" "\\&\n" "static volatile sig_atomic_t gotSIGQUIT = 0;\n" " /* Essayer d'annuler toutes les requêtes d'E/S\n" " en cours lors de la réception d'un SIGQUIT */\n" "\\&\n" "static void /* Gestionnaire pour SIGQUIT */\n" "quitHandler(int sig)\n" "{\n" " gotSIGQUIT = 1;\n" "}\n" "\\&\n" "#define IO_SIGNAL SIGUSR1 /* Signal pour notifier la fin d'E/S */\n" "\\&\n" "static void /* Gestionnaire pour le signal de fin d'E/S */\n" "aioSigHandler(int sig, siginfo_t *si, void *ucontext)\n" "{\n" " if (si-Esi_code == SI_ASYNCIO) {\n" " write(STDOUT_FILENO, \"Gestionnaire pour le signal de fin d'E/S\\en\", 31);\n" "\\&\n" " /* La structure ioRequest correspondante serait disponible en\n" "\t struct ioRequest *ioReq = si-Esi_value.sival_ptr;\n" "\t et le descripteur de fichier serait alors disponible via\n" " ioReq-Eaiocbp-Eaio_fildes */\n" " }\n" "}\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " struct sigaction sa;\n" " int s;\n" " int numReqs; /* Nombre total de requêtes d'E/S dans la file */\n" " int openReqs; /* Nombre de requêtes d'E/S encore en cours */\n" "\\&\n" " if (argc E 2) {\n" " fprintf(stderr, \"Utilisation : %s EcheminE EcheminE...\\en\",\n" " argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " numReqs = argc - 1;\n" "\\&\n" " /* Allocation des tableaux. */\n" "\\&\n" " struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));\n" " if (ioList == NULL)\n" " errExit(\"calloc\");\n" "\\&\n" " struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));\n" " if (aiocbList == NULL)\n" " errExit(\"calloc\");\n" "\\&\n" " /* Mise en place des gestionnaires pour SIGQUIT et le signal de fin d'E/S. */\n" "\\&\n" " sa.sa_flags = SA_RESTART;\n" " sigemptyset(&sa.sa_mask);\n" "\\&\n" " sa.sa_handler = quitHandler;\n" " if (sigaction(SIGQUIT, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" "\\&\n" " sa.sa_flags = SA_RESTART | SA_SIGINFO;\n" " sa.sa_sigaction = aioSigHandler;\n" " if (sigaction(IO_SIGNAL, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" "\\&\n" " /* Ouverture de chaque fichier indiqué sur la ligne de commande et mise en file\n" " d'attente d'une requête de lecture sur le descripteur de fichier correspondant. */\n" "\\&\n" " for (size_t j = 0; j E numReqs; j++) {\n" " ioList[j].reqNum = j;\n" " ioList[j].status = EINPROGRESS;\n" " ioList[j].aiocbp = &aiocbList[j];\n" "\\&\n" " ioList[j].aiocbp-Eaio_fildes = open(argv[j + 1], O_RDONLY);\n" " if (ioList[j].aiocbp-Eaio_fildes == -1)\n" " errExit(\"open\");\n" " printf(\"%s ouvert sur le descripteur %d\\en\", argv[j + 1],\n" " ioList[j].aiocbp-Eaio_fildes);\n" "\\&\n" " ioList[j].aiocbp-Eaio_buf = malloc(BUF_SIZE);\n" " if (ioList[j].aiocbp-Eaio_buf == NULL)\n" " errExit(\"malloc\");\n" "\\&\n" " ioList[j].aiocbp-Eaio_nbytes = BUF_SIZE;\n" " ioList[j].aiocbp-Eaio_reqprio = 0;\n" " ioList[j].aiocbp-Eaio_offset = 0;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_notify = SIGEV_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_signo = IO_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_value.sival_ptr =\n" " &ioList[j];\n" "\\&\n" " s = aio_read(ioList[j].aiocbp);\n" " if (s == -1)\n" " errExit(\"aio_read\");\n" " }\n" "\\&\n" " openReqs = numReqs;\n" "\\&\n" " /* Boucle, surveillance de l'état des requêtes d'E/S. */\n" "\\&\n" " while (openReqs E 0) {\n" " sleep(3); /* Délai entre chaque étape de surveillance */\n" "\\&\n" " if (gotSIGQUIT) {\n" "\\&\n" " /* Lors de la réception de SIGQUIT, essayer d'annuler\n" " toutes les requêtes d'E/S en cours et afficher\n" " l'état renvoyé par les requêtes d'annulation. */\n" "\\&\n" " printf(\"réception de SIGQUIT ; annulation des requêtes d'E/S : \\en\");\n" "\\&\n" " for (size_t j = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" Request %zu on descriptor %d:\", j,\n" " ioList[j].aiocbp-Eaio_fildes);\n" " s = aio_cancel(ioList[j].aiocbp-Eaio_fildes,\n" " ioList[j].aiocbp);\n" " if (s == AIO_CANCELED)\n" " printf(\"I/O canceled\\en\");\n" " else if (s == AIO_NOTCANCELED)\n" " printf(\"I/O not canceled\\en\");\n" " else if (s == AIO_ALLDONE)\n" " printf(\"I/O all done\\en\");\n" " else\n" " perror(\"aio_cancel\");\n" " }\n" " }\n" "\\&\n" " gotSIGQUIT = 0;\n" " }\n" "\\&\n" " /* Vérification de l'état de toutes les\n" " requêtes d'E/S encore en cours. */\n" "\\&\n" " printf(\"aio_error():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" pour la requête %zu (descripteur %d) : \",\n" " j, ioList[j].aiocbp-Eaio_fildes);\n" " ioList[j].status = aio_error(ioList[j].aiocbp);\n" "\\&\n" " switch (ioList[j].status) {\n" " case 0:\n" " printf(\"E/S réussie\\en\");\n" " break;\n" " case EINPROGRESS:\n" " printf(\"En cours\\en\");\n" " break;\n" " case ECANCELED:\n" " printf(\"Annulée\\en\");\n" " break;\n" " default:\n" " perror(\"aio_error\");\n" " break;\n" " }\n" "\\&\n" " if (ioList[j].status != EINPROGRESS)\n" " openReqs--;\n" " }\n" " }\n" " }\n" "\\&\n" " printf(\"Toutes les requêtes d'E/S sont terminées\\en\");\n" "\\&\n" " /* Vérification de l'état de retour de toutes les requêtes d'E/S. */\n" "\\&\n" " printf(\"aio_return():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " ssize_t s;\n" "\\&\n" " s = aio_return(ioList[j].aiocbp);\n" " printf(\" pour la requête %zu (descripteur %d) : %zd\\en\",\n" " j, ioList[j].aiocbp-Eaio_fildes, s);\n" " }\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SEE ALSO" msgstr "VOIR AUSSI" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(2), B(2), B(2), B(2), " "B(2), B(3), B(3), B(3), " "B(3), B(3), B(3), B(3)" msgstr "" "B(2), B(2), B(2), B(2), " "B(2), B(3), B(3), B(3), " "B(3), B(3), B(3), B(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "\"Asynchronous I/O Support in Linux 2.5\", Bhattacharya, Pratt, Pulavarty, " "and Morgan, Proceedings of the Linux Symposium, 2003, E<.UR https://www." "kernel.org/doc/ols/2003/ols2003-pages-351-366.pdf> E<.UE>" msgstr "" "\"Asynchronous I/O Support in Linux 2.5\", Bhattacharya, Pratt, Pulavarty, " "and Morgan, Proceedings of the Linux Symposium, 2003, E<.UR https://www." "kernel.org/doc/ols/2003/ols2003-pages-351-366.pdf> E<.UE>" #. type: TH #: debian-bookworm #, no-wrap msgid "2023-02-05" msgstr "5 février 2023" #. type: TH #: debian-bookworm #, no-wrap msgid "Linux man-pages 6.03" msgstr "Pages du manuel de Linux 6.03" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "#include Eaiocb.hE\n" msgstr "#include Eaiocb.hE\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "struct aiocb {\n" " /* The order of these fields is implementation-dependent */\n" msgstr "" "struct aiocb {\n" " /* L'ordre de ces champs dépend de l'implémentation */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " int aio_fildes; /* File descriptor */\n" " off_t aio_offset; /* File offset */\n" " volatile void *aio_buf; /* Location of buffer */\n" " size_t aio_nbytes; /* Length of transfer */\n" " int aio_reqprio; /* Request priority */\n" " struct sigevent aio_sigevent; /* Notification method */\n" " int aio_lio_opcode; /* Operation to be performed;\n" " lio_listio() only */\n" msgstr "" " int aio_fildes; /* Descripteur de fichier */\n" " off_t aio_offset; /* Position dans le fichier */\n" " volatile void *aio_buf; /* Emplacement du tampon */\n" " size_t aio_nbytes; /* Longueur de transfert */\n" " int aio_reqprio; /* Priorité de requête */\n" " struct sigevent aio_sigevent; /* Méthode de notification */\n" " int aio_lio_opcode; /* Opération à réaliser ;\n" " lio_listio() seulement */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Various implementation-internal fields not shown */\n" "};\n" msgstr "" " /* Divers champs internes à l'implémentation ne sont pas montrés */\n" "};\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "/* Operation codes for \\[aq]aio_lio_opcode\\[aq]: */\n" msgstr "/* Codes opératoires pour « aio_lio_opcode » : */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" msgstr "enum { LIO_READ, LIO_WRITE, LIO_NOP };\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 msgid "" "This field is a structure that specifies how the caller is to be notified " "when the asynchronous I/O operation completes. Possible values for " "I are B, B, and " "B. See B(7) for further details." msgstr "" "Structure indiquant comment l'appelant sera notifié de la fin d'une " "opération d'E/S asynchrone. Les valeurs de I " "peuvent être B, B et B. Consultez " "B(7) pour plus de précisions." #. type: SH #: debian-bookworm #, no-wrap msgid "VERSIONS" msgstr "VERSIONS" #. type: Plain text #: debian-bookworm msgid "The POSIX AIO interfaces are provided by glibc since glibc 2.1." msgstr "" "Les interfaces AIO POSIX sont fournies par la glibc depuis la glibc 2.1." #. type: Plain text #: debian-bookworm msgid "POSIX.1-2001, POSIX.1-2008." msgstr "POSIX.1-2001, POSIX.1-2008." #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "#include Efcntl.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" "#include Estdio.hE\n" "#include Eerrno.hE\n" "#include Eaio.hE\n" "#include Esignal.hE\n" msgstr "" "#include Efcntl.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" "#include Estdio.hE\n" "#include Eerrno.hE\n" "#include Eaio.hE\n" "#include Esignal.hE\n" "\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "#define BUF_SIZE 20 /* Size of buffers for read operations */\n" msgstr "#define BUF_SIZE 20 /* Taille des tampons pour les opérations de lecture */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n" msgstr "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "struct ioRequest { /* Application-defined structure for tracking\n" " I/O requests */\n" " int reqNum;\n" " int status;\n" " struct aiocb *aiocbp;\n" "};\n" msgstr "" "struct ioRequest { /* Structure spécifique à l'application\n" " pour suivre les requêtes d'E/S */\n" " int reqNum;\n" " int status;\n" " struct aiocb *aiocbp;\n" "};\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static volatile sig_atomic_t gotSIGQUIT = 0;\n" " /* On delivery of SIGQUIT, we attempt to\n" " cancel all outstanding I/O requests */\n" msgstr "" "static volatile sig_atomic_t gotSIGQUIT = 0;\n" " /* Essayer d'annuler toutes les requêtes d'E/S\n" " en cours lors de la réception d'un SIGQUIT */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static void /* Handler for SIGQUIT */\n" "quitHandler(int sig)\n" "{\n" " gotSIGQUIT = 1;\n" "}\n" msgstr "" "static void /* Gestionnaire pour SIGQUIT */\n" "quitHandler(int sig)\n" "{\n" " gotSIGQUIT = 1;\n" "}\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "#define IO_SIGNAL SIGUSR1 /* Signal used to notify I/O completion */\n" msgstr "#define IO_SIGNAL SIGUSR1 /* Signal pour notifier la fin d'E/S */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static void /* Handler for I/O completion signal */\n" "aioSigHandler(int sig, siginfo_t *si, void *ucontext)\n" "{\n" " if (si-Esi_code == SI_ASYNCIO) {\n" " write(STDOUT_FILENO, \"I/O completion signal received\\en\", 31);\n" msgstr "" "static void /* Gestionnaire pour le signal de fin d'E/S */\n" "aioSigHandler(int sig, siginfo_t *si, void *ucontext)\n" "{\n" " if (si-Esi_code == SI_ASYNCIO) {\n" " \twrite(STDOUT_FILENO, \"Signal de fin d'E/S reçu\\en\", 31);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* The corresponding ioRequest structure would be available as\n" " struct ioRequest *ioReq = si-Esi_value.sival_ptr;\n" " and the file descriptor would then be available via\n" " ioReq-Eaiocbp-Eaio_fildes */\n" " }\n" "}\n" msgstr "" "\t /* La structure ioRequest correspondante serait disponible en\n" "\t struct ioRequest *ioReq = si-Esi_value.sival_ptr;\n" "\t et le descripteur de fichier serait alors disponible via\n" "\t ioReq-Eaiocbp-Eaio_fildes */\n" " }\n" "}\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " struct sigaction sa;\n" " int s;\n" " int numReqs; /* Total number of queued I/O requests */\n" " int openReqs; /* Number of I/O requests still in progress */\n" msgstr "" "int\n" "main(int argc, char *argv[])\n" "{\n" " struct sigaction sa;\n" " int s;\n" " int numReqs; /* Nombre total de requêtes d'E/S dans la file */\n" " int openReqs; /* Nombre de requêtes d'E/S encore en cours */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (argc E 2) {\n" " fprintf(stderr, \"Usage: %s EpathnameE EpathnameE...\\en\",\n" " argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" " if (argc E 2) {\n" " fprintf(stderr, \"Utilisation : %s EcheminE EcheminE...\\en\",\n" " argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " numReqs = argc - 1;\n" msgstr " numReqs = argc - 1;\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Allocate our arrays. */\n" msgstr " /* Allocation des tableaux. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));\n" " if (ioList == NULL)\n" " errExit(\"calloc\");\n" msgstr "" " struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));\n" " if (ioList == NULL)\n" " errExit(\"calloc\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));\n" " if (aiocbList == NULL)\n" " errExit(\"calloc\");\n" msgstr "" " struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));\n" " if (aiocbList == NULL)\n" " errExit(\"calloc\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Establish handlers for SIGQUIT and the I/O completion signal. */\n" msgstr " /* Mise en place des gestionnaires pour SIGQUIT et le signal de fin d'E/S. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " sa.sa_flags = SA_RESTART;\n" " sigemptyset(&sa.sa_mask);\n" msgstr "" " sa.sa_flags = SA_RESTART;\n" " sigemptyset(&sa.sa_mask);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " sa.sa_handler = quitHandler;\n" " if (sigaction(SIGQUIT, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" msgstr "" " sa.sa_handler = quitHandler;\n" " if (sigaction(SIGQUIT, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " sa.sa_flags = SA_RESTART | SA_SIGINFO;\n" " sa.sa_sigaction = aioSigHandler;\n" " if (sigaction(IO_SIGNAL, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" msgstr "" " sa.sa_flags = SA_RESTART | SA_SIGINFO;\n" " sa.sa_sigaction = aioSigHandler;\n" " if (sigaction(IO_SIGNAL, &sa, NULL) == -1)\n" " errExit(\"sigaction\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Open each file specified on the command line, and queue\n" " a read request on the resulting file descriptor. */\n" msgstr "" " /* Ouverture de chaque fichier indiqué sur la ligne de commande et mise en file\n" " d'attente d'une requête de lecture sur le descripteur de fichier correspondant. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " for (size_t j = 0; j E numReqs; j++) {\n" " ioList[j].reqNum = j;\n" " ioList[j].status = EINPROGRESS;\n" " ioList[j].aiocbp = &aiocbList[j];\n" msgstr "" " for (size_t = 0; j E numReqs; j++) {\n" " ioList[j].reqNum = j;\n" " ioList[j].status = EINPROGRESS;\n" " ioList[j].aiocbp = &aiocbList[j];\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " ioList[j].aiocbp-Eaio_fildes = open(argv[j + 1], O_RDONLY);\n" " if (ioList[j].aiocbp-Eaio_fildes == -1)\n" " errExit(\"open\");\n" " printf(\"opened %s on descriptor %d\\en\", argv[j + 1],\n" " ioList[j].aiocbp-Eaio_fildes);\n" msgstr "" " ioList[j].aiocbp-Eaio_fildes = open(argv[j + 1], O_RDONLY);\n" " if (ioList[j].aiocbp-Eaio_fildes == -1)\n" " errExit(\"open\");\n" " printf(\"%s ouvert sur le descripteur %d\\en\", argv[j + 1],\n" " ioList[j].aiocbp-Eaio_fildes);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " ioList[j].aiocbp-Eaio_buf = malloc(BUF_SIZE);\n" " if (ioList[j].aiocbp-Eaio_buf == NULL)\n" " errExit(\"malloc\");\n" msgstr "" " ioList[j].aiocbp-Eaio_buf = malloc(BUF_SIZE);\n" " if (ioList[j].aiocbp-Eaio_buf == NULL)\n" " errExit(\"malloc\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " ioList[j].aiocbp-Eaio_nbytes = BUF_SIZE;\n" " ioList[j].aiocbp-Eaio_reqprio = 0;\n" " ioList[j].aiocbp-Eaio_offset = 0;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_notify = SIGEV_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_signo = IO_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_value.sival_ptr =\n" " &ioList[j];\n" msgstr "" " ioList[j].aiocbp-Eaio_nbytes = BUF_SIZE;\n" " ioList[j].aiocbp-Eaio_reqprio = 0;\n" " ioList[j].aiocbp-Eaio_offset = 0;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_notify = SIGEV_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_signo = IO_SIGNAL;\n" " ioList[j].aiocbp-Eaio_sigevent.sigev_value.sival_ptr =\n" " &ioList[j];\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " s = aio_read(ioList[j].aiocbp);\n" " if (s == -1)\n" " errExit(\"aio_read\");\n" " }\n" msgstr "" " s = aio_read(ioList[j].aiocbp);\n" " if (s == -1)\n" " errExit(\"aio_read\");\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " openReqs = numReqs;\n" msgstr " openReqs = numReqs;\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Loop, monitoring status of I/O requests. */\n" msgstr " /* Boucle, surveillance de l'état des requêtes d'E/S. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " while (openReqs E 0) {\n" " sleep(3); /* Delay between each monitoring step */\n" msgstr "" " while (openReqs E 0) {\n" " sleep(3); /* Délai entre chaque étape de surveillance */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " if (gotSIGQUIT) {\n" msgstr " if (gotSIGQUIT) {\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* On receipt of SIGQUIT, attempt to cancel each of the\n" " outstanding I/O requests, and display status returned\n" " from the cancelation requests. */\n" msgstr "" " /* Lors de la réception de SIGQUIT, essayer d'annuler\n" " toutes les requêtes d'E/S en cours et afficher\n" " l'état renvoyé par les requêtes d'annulation. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " printf(\"got SIGQUIT; canceling I/O requests: \\en\");\n" msgstr " printf(\"réception de SIGQUIT ; annulation des requêtes d'E/S : \\en\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " for (size_t j = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" Request %zu on descriptor %d:\", j,\n" " ioList[j].aiocbp-Eaio_fildes);\n" " s = aio_cancel(ioList[j].aiocbp-Eaio_fildes,\n" " ioList[j].aiocbp);\n" " if (s == AIO_CANCELED)\n" " printf(\"I/O canceled\\en\");\n" " else if (s == AIO_NOTCANCELED)\n" " printf(\"I/O not canceled\\en\");\n" " else if (s == AIO_ALLDONE)\n" " printf(\"I/O all done\\en\");\n" " else\n" " perror(\"aio_cancel\");\n" " }\n" " }\n" msgstr "" " for (size_t = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" Requête %zu sur le descripteur %d :\", j,\n" " ioList[j].aiocbp-Eaio_fildes);\n" " s = aio_cancel(ioList[j].aiocbp-Eaio_fildes,\n" " ioList[j].aiocbp);\n" " if (s == AIO_CANCELED)\n" " printf(\"E/S annulée\\en\");\n" " else if (s == AIO_NOTCANCELED)\n" " printf(\"E/S non annulée\\en\");\n" " else if (s == AIO_ALLDONE)\n" " printf(\"E/S terminées\\en\");\n" " else\n" " perror(\"aio_cancel\");\n" " }\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " gotSIGQUIT = 0;\n" " }\n" msgstr "" " gotSIGQUIT = 0;\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Check the status of each I/O request that is still\n" " in progress. */\n" msgstr "" " /* Vérification de l'état de toutes les\n" " requêtes d'E/S encore en cours. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " printf(\"aio_error():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" for request %zu (descriptor %d): \",\n" " j, ioList[j].aiocbp-Eaio_fildes);\n" " ioList[j].status = aio_error(ioList[j].aiocbp);\n" msgstr "" " printf(\"aio_error():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " if (ioList[j].status == EINPROGRESS) {\n" " printf(\" pour la requête %zu (descripteur %d) : \",\n" " j, ioList[j].aiocbp-Eaio_fildes);\n" " ioList[j].status = aio_error(ioList[j].aiocbp);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " switch (ioList[j].status) {\n" " case 0:\n" " printf(\"I/O succeeded\\en\");\n" " break;\n" " case EINPROGRESS:\n" " printf(\"In progress\\en\");\n" " break;\n" " case ECANCELED:\n" " printf(\"Canceled\\en\");\n" " break;\n" " default:\n" " perror(\"aio_error\");\n" " break;\n" " }\n" msgstr "" " switch (ioList[j].status) {\n" " case 0:\n" " printf(\"E/S réussie\\en\");\n" " break;\n" " case EINPROGRESS:\n" " printf(\"En cours\\en\");\n" " break;\n" " case ECANCELED:\n" " printf(\"Annulée\\en\");\n" " break;\n" " default:\n" " perror(\"aio_error\");\n" " break;\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (ioList[j].status != EINPROGRESS)\n" " openReqs--;\n" " }\n" " }\n" " }\n" msgstr "" " if (ioList[j].status != EINPROGRESS)\n" " openReqs--;\n" " }\n" " }\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " printf(\"All I/O requests completed\\en\");\n" msgstr " printf(\"Toutes les requêtes d'E/S sont terminées\\en\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Check status return of all I/O requests. */\n" msgstr " /* Vérification de l'état de retour de toutes les requêtes d'E/S. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " printf(\"aio_return():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " ssize_t s;\n" msgstr "" " printf(\"aio_return():\\en\");\n" " for (size_t j = 0; j E numReqs; j++) {\n" " ssize_t s;\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " s = aio_return(ioList[j].aiocbp);\n" " printf(\" for request %zu (descriptor %d): %zd\\en\",\n" " j, ioList[j].aiocbp-Eaio_fildes, s);\n" " }\n" msgstr "" " s = aio_return(ioList[j].aiocbp);\n" " printf(\" pour la requête %zu (descripteur %d) : %zd\\en\",\n" " j, ioList[j].aiocbp-Eaio_fildes, s);\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" " exit(EXIT_SUCCESS);\n" "}\n" #. type: TH #: fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "31 octobre 2023" #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "Pages du manuel de Linux 6.06" #. type: TH #: fedora-rawhide #, no-wrap msgid "Linux man-pages 6.7" msgstr "Pages du manuel de Linux 6.7" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "2023-03-30" msgstr "30 mars 2023" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "Linux man-pages 6.04" msgstr "Pages du manuel de Linux 6.04" #. type: TH #: opensuse-tumbleweed #, no-wrap msgid "Linux man-pages (unreleased)" msgstr "Pages du manuel de Linux (non publiées)"