Provided by: manpages-fr-dev_3.57d1p1-1_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   (consultez
   feature_test_macros(7)) :

       insque(), remque() :
           _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

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.

CONFORMITÉ

       POSIX.1-2001.

NOTES

       Traditionnellement  (par  exemple,  SunOS,  Linux libc 4 et libc 5), les paramètres de ces
       fonctions sont du type struct qelem *, définie 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>. Sous Linux, libc4 et libc5 ils sont renseignés dans <stdlib.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.

EXEMPLE

       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;

           e = malloc(sizeof(struct element));
           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);
       }

COLOPHON

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

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <http://po4a.alioth.debian.org/>  par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe   Blaess   <http://www.blaess.fr/christophe/>   (1996-2003),    Alain    Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Florentin  Duneau  et  l'équipe francophone de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».

                                         9 septembre 2010                               INSQUE(3)