Provided by: manpages-fr-dev_4.21.0-2_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  ce‐
       ci :

           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éci‐
       sé 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 correcte‐
       ment définis pour chaque élément.

EXEMPLES

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

           $ ./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  <tvi‐
       gnaud@mandriva.com>,  François  Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fe‐
       vrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau  <jcristau@de‐
       bian.org>,   Thomas   Huriaux   <thomas.huriaux@gmail.com>,  Nicolas  François  <nicolas.francois@centra‐
       liens.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-bap‐
       tiste@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 à  de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    5 février 2023                                        insque(3)