Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       insque, remque - Ajouter ou supprimer un element d'une file

SYNOPSIS

       #include <search.h>

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

       void remque(void *elem);

   Exigences  de  macros  de  test de fonctionnalites 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
       chainee. Chaque element de cette liste est une structure dont les  deux
       premiers  elements  sont  des pointeurs avant et arriere. La liste peut
       etre lineaire (p. ex. un pointeur avant ou un pointeur arriere NULL) ou
       circulaire.

       insque() insere l'element pointe par elem immediatement apres l'element
       pointe par prev.

       Si la liste est lineaire, alors l'appel insque(elem,  NULL)  peut  etre
       utilise  pour  inserer l'element initial de la liste et l'appel definit
       les pointeurs avant et arriere a NULL.

       Si la liste est circulaire, l'appelant doit s'assurer que les pointeurs
       avant  et arriere du premier element sont initialises pour pointer vers
       cet element, et que l'argument prev de insque() doit aussi pointer vers
       cet element.

       remque()  supprime  l'element  pointe  par  elem de la liste doublement
       chainee.

CONFORMIT'E

       POSIX.1-2001.

NOTES

       Traditionnellement (par exemple, SunOS, Linux libc 4  et  libc 5),  les
       parametres  de ces fonctions sont du type struct qelem *, definie 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  definie   avant
       l'inclusion de <search.h>.

       L'emplacement  des  prototypes  de  ces  fonctions  varie  suivant  les
       differentes versions d'Unix. Celui precise ci-dessus  correspond  a  la
       version  POSIX.  Certains  systemes  les  placent dans <string.h>. Sous
       Linux, libc4 et libc5 ils sont renseignes dans <stdlib.h>.

BOGUES

       Dans la glibc 2.4 et les versions precedentes, il n'etait pas  possible
       de  specifier  prev  a  NULL. En consequence, pour construire une liste
       lineaire, l'appelant devait construire une liste avec un appel  initial
       contenant  les  deux  premiers elements de la liste, avec les pointeurs
       avant et arriere correctement definis pour chaque element.

EXEMPLE

       Le programme suivant montre une utilisation de insque(). Ci-dessous  la
       sortie de l'execution 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.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.

                               9 septembre 2010                      INSQUE(3)