insque(3C) insque(3C)
NAME
insque, remque - Ein Element in eine Warteschlange einfügen bzw. aus
aus ihr entfernen
SYNTAX
#include <search.h>
void insque(void *element, void *pred);
void remque(void *element);
BESCHREIBUNG
Die Funktionen insque() und remque() bearbeiten Warteschlangen, die
aus doppelt gelinkten Listen aufgebaut sind. Die Warteschlange kann
entweder kreisförmig oder linear aufgebaut sein. Eine Anwendung, die
insque() oder remque() verwendet, muß eine Struktur definieren, in der
die ersten beiden Komponenten Zeiger auf denselben Strukturtyp und
alle weiteren Komponenten anwendungsspezifisch sind. Die erste Kompo-
nente der Struktur ist ein Vorwärtszeiger auf den nächsten Eintrag in
der Warteschlange. Die zweite Komponente ist ein Rückwärtszeiger auf
den vorherigen Eintrag in der Warteschlange. Lineare Warteschlangen
werden durch Nullzeiger abgeschlossen. Die Namen der Struktur und der
Zeigerkomponenten unterliegen keinen besonderen Einschränkungen.
Die Funktion insque() fügt das Element, auf das element zeigt, in eine
Warteschlange direkt hinter das Element ein, auf das pred zeigt.
Die Funktion remque() entfernt das Element, auf das element zeigt, aus
der Warteschlange.
Soll die Warteschlange als linear aufgebaute Liste verwendet werden,
werden beim Aufrufen von insque(&element, NULL) (wobei element das
erste Element in der Warteschlange ist) die Vorwärts- und Rückwärts-
zeiger von element auf Nullzeiger gesetzt.
Soll die Warteschlange als kreisförmig aufgebaute Liste verwendet wer-
den, muß die Anwendung den Vorwärts- und den Rückwärtszeiger des
ersten Elements in der Warteschlange auf die eigene Adresse dieses
Elements setzen.
RÜCKGABEWERT
Die Funktionen insque() und remque() geben keinen Wert zurück.
ANWENDUNGSZWECK
Frühere Implementierungen dieser Funktionen haben die Argumente als
Typ struct qelem * anstatt wie hier als Typ void * beschrieben. In
diesen Implementierungen wurde struct qelem in der Include-Datei
<search.h> allgemein wie folgt definiert:
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
insque(3C) insque(3C)
struct qelem {
struct qelem *qforw;
struct qelem *qback;
};
Anwendungen, die diese Funktionen verwenden, konnten diese Struktur
jedoch niemals direkt einsetzen, da sie keinen Platz für die tatsäch-
lichen Daten aus den Elementen enthielt. Die meisten Anwendungen defi-
nierten Strukturen, die die beiden Zeiger als die einleitenden Ele-
mente enthielten und in denen Platz für bzw. Zeiger auf die Daten des
Objekts vorgesehen war(en). Anwendungen, die diese Funktionen zum
Aktualisieren mehrerer unterschiedlicher Tabellentypen verwenden woll-
ten, waren ferner mit dem Problem konfrontiert, daß sie zwei oder mehr
verschiedene Strukturen mit demselben Namen einsetzen mußten, wollten
sie struct qelem tatsächlich wie angegeben verwenden.
Wie hier beschrieben, wurde von den Implementierungen eine Struktur
erwartet, bei der die ersten beiden Komponenten ein Vorwärts- und ein
Rückwärtszeiger auf Strukturen waren. Bei C-Compilern ohne Funktions-
prototypen verwendeten die Anwendungen die Strukturen wie im obigen
Abschnitt BESCHREIBUNG angegeben, und der Compiler verhielt sich so,
wie von der Anwendung erwartet.
Würde diese Methode allerdings mit einem ISO-C-Compiler und dem frühe-
ren Funktionsprototyp weiter verfolgt, müßten die meisten Anwendungen
dahingehend geändert werden, daß Zeiger auf die tatsächlich verwende-
ten Strukturen in Zeiger auf struct qelem umgesetzt werden, um Warnun-
gen bei der Kompilierung zu vermeiden. Durch die Angabe von void * als
Argumenttyp mußten die Anwendungen nicht geändert werden (sofern sie
nicht ausdrücklich auf die Struktur struct qelem verwiesen und davon
abhängig waren, daß die Struktur in <search.h> definiert war).
SIEHE AUCH
search(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98