Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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)