Man page - insque(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

insque

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
ATTRIBUTS
VERSIONS
STANDARDS
HISTORIQUE
BOGUES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

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

Image grohtml-3885492-1.png

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 .