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

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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
               || /* glibc >= 2.19 : */ _DEFAULT_SOURCE
               || /* glibc <= 2.19 : */ _SVID_SOURCE

DESCRIPTION

       Les fonctions insque() et remque() manipulent une liste doublement chaînée. Chaque élément
       de  cette liste est une structure dont les deux premiers éléments sont des pointeurs avant
       et arrière. La liste peut être linéaire (c'est-à-dire que l'élément en fin de liste  a  un
       pointeur  avant  à  NULL,  et l'élément en début de liste a un pointeur arrière à NULL) ou
       circulaire.

       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.

       remque() supprime l'élément pointé par elem de la liste doublement chaînée.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │insque(), remque()                                      │ Sécurité des threads │ MT-Safe │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       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 <search.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

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

       static struct element *
       new_element(void)
       {
           struct element *e;

           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)

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  ⟨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⟩.