Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       insque, remque - Ajouter ou supprimer un élément d'une file

SYNOPSIS

       #include <search.h>

       void insque(void *elem, void *prev);

       void remque(void *elem);

   Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :

       insque(), remque() :
           _XOPEN_SOURCE >= 500
               || /* Depuis la version 2.19 de la glibc: */ _DEFAULT_SOURCE
               || /* Pour les versions de la glibc <= 2.19: */ _SVID_SOURCE

DESCRIPTION

       The  insque()   and  remque()   functions  manipulate  doubly linked lists. Each element in the list is a
       structure of which the first two elements are a forward and a backward pointer. The linked  list  may  be
       linear  (i.e.,  NULL forward pointer at the end of the list and NULL backward pointer at the start of the
       list)  or circular.

       insque() insère l'élément pointé par elem immédiatement après l'élément pointé par prev.

       Si la liste est linéaire, alors l'appel insque(elem, NULL)  peut  être  utilisé  pour  insérer  l'élément
       initial de la liste et l'appel définit les pointeurs avant et arrière à NULL.

       Si  la  liste  est  circulaire,  l'appelant  doit s'assurer que les pointeurs avant et arrière du premier
       élément sont initialisés pour pointer vers cet élément, et que l'argument prev  de  insque()  doit  aussi
       pointer vers cet élément.

       The remque()  function removes the element pointed to by elem from the doubly linked list.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌────────────────────┬──────────────────────┬─────────┐
       │ InterfaceAttributValeur  │
       ├────────────────────┼──────────────────────┼─────────┤
       │ insque(), remque() │ Sécurité des threads │ MT-Safe │
       └────────────────────┴──────────────────────┴─────────┘

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008.

NOTES

       Sur  d'anciens  systèmes,  les  paramètres  de ces fonctions étaient du type struct qelem *, défini comme
       ceci :

           struct qelem {
               struct    qelem *q_forw;
               struct    qelem *q_back;
               char      q_data[1];
           };

       C'est ce que vous obtiendrez si _GNU_SOURCE est définie avant l'inclusion de <search.h>.

       L'emplacement des prototypes de ces fonctions  varie  suivant  les  différentes  versions  d'UNIX.  Celui
       précisé ci-dessus correspond à la version POSIX. Certains systèmes les placent dans <string.h>.

BOGUES

       Dans  la  glibc 2.4  et  les  versions  précédentes, il n'était pas possible de spécifier prev à NULL. En
       conséquence, pour construire une liste linéaire, l'appelant devait construire une  liste  avec  un  appel
       initial  contenant  les  deux  premiers  éléments  de  la  liste,  avec  les  pointeurs  avant et arrière
       correctement définis pour chaque élément.

EXEMPLES

       Le programme suivant montre  une  utilisation  de  insque().  Ci-dessous  la  sortie  de  l'exécution  du
       programme :

           $ ./a.out -c a b c
           Traversing completed list:
               a
               b
               c
           That was a circular list

   Source du programme

       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>
       #include <search.h>

       struct element {
           struct element *forward;
           struct element *backward;
           char *name;
       };

       static struct element *
       new_element(void)
       {
           struct element *e = malloc(sizeof(*e));
           if (e == NULL) {
               fprintf(stderr, "malloc() failed\n");
               exit(EXIT_FAILURE);
           }

           return e;
       }

       int
       main(int argc, char *argv[])
       {
           struct element *first, *elem, *prev;
           int circular, opt, errfnd;

           /* The "-c" command-line option can be used to specify that the
              list is circular */

           errfnd = 0;
           circular = 0;
           while ((opt = getopt(argc, argv, "c")) != -1) {
               switch (opt) {
               case 'c':
                   circular = 1;
                   break;
               default:
                   errfnd = 1;
                   break;
               }
           }

           if (errfnd || optind >= argc) {
               fprintf(stderr,  "Usage: %s [-c] string...\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           /* Create first element and place it in the linked list */

           elem = new_element();
           first = elem;

           elem->name = argv[optind];

           if (circular) {
               elem->forward = elem;
               elem->backward = elem;
               insque(elem, elem);
           } else {
               insque(elem, NULL);
           }

           /* Add remaining command-line arguments as list elements */

           while (++optind < argc) {
               prev = elem;

               elem = new_element();
               elem->name = argv[optind];
               insque(elem, prev);
           }

           /* Traverse the list from the start, printing element names */

           printf("Traversing completed list:\n");
           elem = first;
           do {
               printf("    %s\n", elem->name);
               elem = elem->forward;
           } while (elem != NULL && elem != first);

           if (elem == first)
               printf("That was a circular list\n");

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       queue(7)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions  pour  signaler  des  anomalies et la dernière version de cette page peuvent être trouvées à
       l'adresse https://www.kernel.org/doc/man-pages/.

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>,    Jean-Baptiste    Holcroft    <jean-baptiste@holcroft.fr>    et   Grégoire   Scano
       <gregoire.scano@malloc.fr>

       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 à
       debian-l10n-french@lists.debian.org.

                                                 1 novembre 2020                                       INSQUE(3)