Provided by: manpages-fr-dev_4.27.0-1_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 │
       └──────────────────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

VERSIONS

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

STANDARDS

       POSIX.1-2008.

HISTORIQUE

       POSIX.1-2001.

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

Pages du manuel de Linux 6.9.1                    15 juin 2024                                         insque(3)