Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ insque(3C) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

search(5)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026