Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ intro_prm2(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

intro_prm2(2)                                                 intro_prm2(2)

NAME
     introprm2, introprm3, introprm3m - Einführung in die Bibliotheks-
     funktionen

BESCHREIBUNG
   Hinweise zur Umstellung auf XPG4

     Mit der Einführung von XPG4 hat sich das Verhalten von einigen Bibli-
     otheksfunktionen etwas verändert. Das kann u. U. zu einem geänderten
     Verhalten von bestehenden Programmen und Bibliotheken führen. Um die
     daraus entstehenden Probleme möglichst einzuschränken, laufen die
     betroffenen Funktionen standardmäßig im XPG3-Modus, sie verhalten sich
     also wie bisher. Wenn Sie bei diesen Funktionen die XPG4-Funktionali-
     tät verwenden wollen, ist folgendes zu beachten:

     -  Zum Generieren muß der c89-Compiler [siehe cc(1)] verwendet werden,
        der automatisch den XPG4-Modus aktiviert.

     -  Zur Laufzeit muß die Umgebungsvariable XPGIV in die Umgebung
        exportiert werden.

     Die folgenden Funktionen verhalten sich in den beiden Übersetzungsmodi
     unterschiedlich. Bei den mathematischen Funktionen werden im XPG4-
     Modus Eingabe und Ergebnis genauer auf das Auftreten von NaN und Über-
     bzw. Unterläufe geprüft, und es werden entsprechende errno-Werte
     gesetzt:

     acos(), asin(), atan(), atan2(), ceil(), cosh(), erf(), erfc(), exp(),
     fabs(), floor(), fprintf(), fscanf(), gamma(), hypot(), j0(), j1(),
     jn(), lgamma(), log(), log10(), modf(), nllanginfo(), pow(),
     printf(), scanf(), sinh(), sprintf(), sqrt(), sscanf(), strftime(),
     sysconf(), system(), y0(), y1(), yn().

     Die XPG4-Funktionalität der sigaction-Routine ist nur mit dem neuen
     c89-Compiler erreichbar [siehe sigaction(2)].

   C-Bibliotheken und Funktionsgruppen

     Jede Funktion ist entsprechend der Bibliothek, in der sie vorkommt,
     einer Funktionsgruppe zugeordnet, die durch die eingeklammerte Nummer
     hinter dem Funktionsnamen signalisiert wird.

     Die mit (2), (3C) und (3S) gekennzeichneten Funktionen bilden die C-
     Standardbibliothek. Die mit (3E) gekennzeichneten Funktionen bilden
     die ELF-Bibliothek, die (3M)-Funktionen bilden die mathematische
     Bibliothek. Diese drei Bibliotheken werden unten ausführlicher erläu-
     tert.








Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     Die mit (3G) markierten Funktionen bilden die "Allzweck"-Bibliothek
     libgen. Diese Bibliothek ist nicht als gemeinsam nutzbares Objekt
     (shared library) implementiert und wird nicht automatisch vom C-Über-
     setzungssystem gebunden. Geben Sie beim Aufruf des Compilers -lgen an,
     um diese Bibliothek zu binden.

     Die mit (3X) gekennzeichneten Funktionen kommen in diversen Spezialbi-
     bliotheken vor. Dateien, in denen diese Bibliotheken zu finden sind,
     werden in den entsprechenden Abschnitten angegeben.

     Die Funktionsdeklarationen finden Sie in den in jedem Abschnitt ange-
     gebenen #include-Dateien.

     Wenn Sie diese Funktionen, externe Variablen oder Makros neu definie-
     ren, werden bei einem Aufruf diese neuen Definitionen verwendet, und
     nicht die im System vordefinierten Versionen. Alle anderen Namen kön-
     nen neu definiert werden, ohne das Verhalten von anderen Bibliotheks-
     funktionen zu beeinflussen. Beachten Sie aber, daß solche neuen Defi-
     nitionen Konflikte mit Deklarationen in anderen Include-Dateien verur-
     sachen können.

     Die Include-Dateien in INCDIR stellen für die meisten der in hier
     beschriebenen Funktionen Funktionsprototypen (Funktionsdeklarationen,
     die die Typen von Argumenten einschließen) zur Verfügung. Mit Funktions-
     prototypen kann der Compiler die korrekte Verwendung dieser Funktionen
     im Benutzerprogramm überprüfen. Sie können auch den Programmprüfer lint
     verwenden. Er gibt selbst dann Unstimmigkeiten aus, wenn die betreffen-
     den Include-Dateien nicht dazugebunden sind. Definitionen für die mit
     (2), (3C) und (3S) gekennzeichneten Funktionen werden automatisch über-
     prüft. Andere Definitionen können durch die Option -l bei lint einge-
     schlossen werden. Zum Beispiel schließt -lm Definitionen für libm ein.
     Verwenden Sie daher auf jeden Fall den Programmprüfer lint, wenn Sie
     Ihre Programme syntaktisch und semantisch überprüfen wollen.

   Die C-Standardbibliothek
     Die C-Standardbibliothek, die aus den mit (2), (3C) und (3S) bezeich-
     neten Funktionen gebildet wird, wird automatisch vom C-Übersetzungs-
     system geladen. Die C-Standardbibliothek ist als gemeinsam nutzbares
     Objekt (shared library) mit dem Namen libc.so implementiert und auch
     als statische Bibliothek unter dem Namen libc.a verfügbar. Ohne
     zusätzliche Angaben in der Compiler-Aufrufzeile werden C-Programme mit
     der gemeinsam nutzbaren Version der C-Standardbibliothek gebunden. Um
     statisch zu binden, geben Sie in der Compiler-Aufrufzeile die Option
     -dn an [siehe cc(1)].

   Die ELF-Bibliothek libelf
     Mit den Funktionen der ELF-Bibliothek können in einem Programm Objekt-
     dateien, Archivdateien und Archivkomponenten, die im ELF-Format (Exe-
     cutable and Linking Format) vorliegen, manipuliert werden. Die
     Include-Datei libelf.h liefert die Deklaration der Typen und der Funk-
     tionen für alle Bibliotheksdienste. Geben Sie beim Aufruf des Compi-
     lers -lelf an, um diese Bibliothek zu binden [vgl. elf(3E)].


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     Programme kommunizieren mit vielen der höheren Routinen über einen
     sogenannten ELF-Deskriptor. Sobald das Programm beginnt, mit einer
     Datei zu arbeiten, erzeugt die Funktion elfbegin() einen ELF-
     Deskriptor, über den das Programm die Strukturen und Informationen aus
     der Datei manipulieren kann. Diese ELF-Deskriptoren können sowohl zum
     Lesen als auch zum Schreiben von Dateien verwendet werden. Nachdem ein
     Programm für eine Datei einen ELF-Deskriptor angelegt hat, können zur
     Manipulation der einzelnen Dateiabschnitte Abschnittsdeskriptoren
     angelegt werden [siehe elfgetscn(3E)]. Abschnitte enthalten den Groß-
     teil der relevanten Informationen einer Objektdatei, wie zum Beispiel
     Text, Daten, Symboltabelle usw. Ein Abschnittsdeskriptor "gehört"
     genauso zu einem bestimmten ELF-Deskriptor, wie ein Abschnitt zu einer
     Datei gehört. Die Datendeskriptoren sind wiederum über Abschnittsde-
     skriptoren verfügbar; über sie kann das Programm die Informationen aus
     einem Abschnitt manipulieren. Ein Datendeskriptor "gehört" zu einem
     Abschnittsdeskriptor.

     Deskriptoren sind eigene, private Zugriffsstrukturen, mit denen ein
     Programm auf eine Datei und deren Inhalte zugreifen kann. Ein Datende-
     skriptor ist also mit einem Abschnittsdeskriptor verknüpft, der wiede-
     rum mit einem ELF-Deskriptor verbunden ist; der ELF-Deskriptor wiede-
     rum ist mit einer Datei verknüpft. Obwohl Deskriptoren nur für das
     Programm selbst gültig sind, ermöglichen sie den Zugriff auch auf
     gemeinsam nutzbare Daten. Ein Programm, das beispielsweise verschie-
     dene Eingabedateien kombiniert und andere Dateien erzeugt oder aktua-
     lisiert, kann Datendeskriptoren für einen Eingabeabschnitt und einen
     Ausgabeabschnitt anlegen. Um den Ausgabedeskriptor zu aktualisieren,
     können dann die über den Eingabedeskriptor verfügbaren Daten wieder-
     verwendet werden. Auf diese Weise werden zwar verschiedene Deskripto-
     ren verwendet, auf die entsprechenden Daten wird aber gemeinsam zuge-
     griffen. Dieser gemeinsame Zugriff vermeidet, daß zuviel Speicherplatz
     für getrennte Puffer angelegt wird; ferner steigt der Durchsatz, da
     das Kopieren von Daten wegfällt.

   Dateiklassen

     ELF bietet einen Rahmen zur Definition von Objektdateien, wobei ver-
     schiedene Prozessoren und Architekturen unterstützt werden. Ein wich-
     tiges Unterscheidungskriterium zwischen Objektdateien ist die Klasse
     bzw. die Kapazität der Datei. Die 32-Bit-Klasse unterstützt Architek-
     turen, in denen ein 32-Bit-Objekt Adressen, Dateilängen usw. wie folgt
     darstellen kann:












Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     _________________________________________________
    | Name         |  Zweck                          |
    |______________|_________________________________|
    | Elf32Addr   |  Programmadresse (unsigned)     |
    |______________|_________________________________|
    | Elf32Half   |  mittelgroße Ganzzahl (unsigned)|
    |______________|_________________________________|
    | Elf32Off    |  Datei-Offset (unsigned)        |
    |______________|_________________________________|
    | Elf32Sword  |  große Ganzzahl mit Vorzeichen  |
    |______________|_________________________________|
    | Elf32Word   |  große Ganzzahl (unsigned)      |
    |______________|_________________________________|
    | unsigned char|  kleine Ganzzahl (unsigned)     |
    |______________|_________________________________|

     Andere Klassen werden bei Bedarf definiert, um größere (oder kleinere)
     Maschinen zu unterstützen. Einige Bibliotheksdienste arbeiten nur mit
     Datenobjekten von bestimmten Klassen, während andere klassenunabhängig
     sind. Um diesen Unterschied hervorzuheben, sind die Namen der Biblio-
     theksfunktionen so gewählt, daß ihr Status erkennbar ist. Dies wird
     unten näher beschrieben.

   Datendarstellung

     Zwei parallele Objektmengen realisieren typischerweise eine Umgebung
     zum Cross-Compilieren. Eine Menge entspricht dem Dateiinhalt, während
     die andere Menge dem tatsächlichen Speicherabbild des Programms ent-
     spricht, welches die Datei manipuliert. Die Typdefinitionen, die in
     der Include-Datei angegeben sind, arbeiten auf der realen Maschine,
     welche eine andere Datencodierung als die Zielmaschine (Längen, Wer-
     tigkeit der Bytes, usw.) besitzen kann. Die Speicherobjekte der tat-
     sächlichen Maschine sollten mindestens so groß sein wie die Dateiob-
     jekte (um Informationsverlusten vorzubeugen), dürfen aber auch größer
     sein, wenn dies auf der Host-Maschine naheliegend ist.

     Zur Konvertierung zwischen Datei- und Speicherdarstellungen existieren
     Umsetzungswerkzeuge. Einige Bibliotheksroutinen konvertieren Daten
     automatisch, während andere die Konvertierung dem Programm überlassen.
     In jedem Fall müssen Programme, welche Objektdateien erzeugen, Objekte
     vom Dateityp in diese Dateien schreiben; Programme, welche Objektda-
     teien lesen, gehen entsprechend vor. Siehe elfxlate(3E) und
     elffsize(3E) für genauere Informationen.

     Programme können Daten explizit umsetzen, wobei Struktur und Semantik
     der Objektdatei von ihnen vollständig kontrolliert werden. Wenn das
     Programm diese Kontrolle nicht ausüben möchte, bietet die Bibliothek
     eine Schnittstelle auf höherem Niveau an, welche viele Details der
     Objektdatei versteckt. elfbegin() und andere Funktionen erlauben
     einem Programm das Bearbeiten von realen Speichertypen, wobei die Kon-
     vertierung zwischen Speicherobjekten und deren Dateiäquivalenten auto-
     matisch beim Lesen oder Schreiben einer Objektdatei ausgeführt wird.


Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Elf-Versionen

     Objektdateiversionen erlauben die Anpassung von ELF an neue Anforde-
     rungen. Drei (unabhängige) Versionen können für ein Programm von
     Bedeutung sein. Erstens kennt ein Anwendungsprogramm eine bestimmte
     Version durch seine Übersetzung mit bestimmten Include-Dateien. Zwei-
     tens wurden bei der Übersetzung der Zugriffsbibliothek bestimmte
     Include-Dateien verwendet; sie kontrollieren die Version, die von der
     Bibliothek verstanden wird. Drittens enthält die ELF-Objektdatei einen
     Wert, der ihre Version bezeichnet; diese wird durch die ELF-Version
     bestimmt, die dem Erzeuger der Datei bekannt ist. Im Idealfall stimmen
     alle drei Versionen überein, jedoch dürfen sie auch voneinander abwei-
     chen.

     -  Ist eine Programmversion aktueller als die Zugriffsbibliothek, ist
        es möglich, daß das Programm Informationen verwendet, die der
        Bibliothek unbekannt sind. Übersetzungsroutinen können dann nicht
        entsprechend arbeiten, was zu einem undefinierten Verhalten führt.
        Dieser Zustand erfordert die Installation einer neuen Bibliothek.

     -  Die Bibliotheksversion kann aktueller als die des Programms und der
        Datei sein. Die Bibliothek verarbeitet alte Versionen; Kompatibili-
        tätsprobleme werden in diesem Fall umgangen.

     -  Schließlich kann eine Dateiversion einen aktuelleren Wert aufwei-
        sen, den weder das Programm noch die Bibliothek versteht. Unter
        Umständen kann das Programm dann die Datei dennoch bearbeiten,
        abhängig davon, ob die Datei Zusatzinformationen enthält und ob
        diese Informationen ohne Einbußen ignoriert werden können. Die
        sichere Alternative besteht auch hier in der Installation einer
        neuen Bibliothek, welche die Version der Datei bearbeiten kann.

     Um die Unterschiede zu berücksichtigen, muß ein Programm die Funktion
     elfversion() verwenden, um seine Version der Bibliothek mitzuteilen;
     dadurch wird die Arbeitsversion für den Prozeß angelegt. Durch diese
     Vorgehensweise akzeptiert die Bibliothek Daten vom Programm und kann
     Daten für das Programm in korrekter Darstellung angeben. Wenn die
     Bibliothek Objektdateien liest, wird zur Interpretation der Daten die
     Version der Datei verwendet. Beim Schreiben von Dateien oder beim Kon-
     vertieren von Speichertypen, die Dateiäquivalente darstellen, verwen-
     det die Bibliothek für die Dateidaten die Arbeitsversion des Pro-
     gramms.

   Systemdienste

     Wie bereits erwähnt, bieten elfbegin() und andere Routinen für ELF-
     Dateien eine Schnittstelle auf höherem Niveau; Ein- und Ausgabe werden
     für das Anwendungsprogramm ausgeführt. Diese Routinen gehen davon aus,
     daß ein Programm ganze Dateien im Speicher halten kann, ohne daß
     explizit temporäre Dateien verwendet werden. Beim Lesen einer Datei
     bringen die Bibliotheksroutinen die Daten in den Speicher und führen
     dann Operationen auf der Speicherkopie der Datei aus. Lesen oder


Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     schreiben Programme große Objektdateien nach diesem Ansatz, so muß
     dies auf einer Maschine geschehen, die über einen entsprechend großen
     virtuellen Adreßraum für den Prozeß verfügt. Wenn die zugrundeliegende
     systembedingte maximale Anzahl der geöffneten Dateien überschritten
     wird, kann ein Programm elfcntl() verwenden, um alle notwendigen
     Daten aus der Datei zu lesen. Danach wird dem Programm erlaubt, den
     Dateideskriptor zu schließen und anschließend wieder zu benutzen.

     Obwohl die elfbegin()-Schnittstelle für die meisten Programme ausrei-
     chend und effizient ist, kann es auch Situationen geben, in denen sie
     nicht anwendbar ist. In diesen Fällen kann ein Anwendungsprogramm die
     Datenübersetzungsroutine elfxlate() direkt aufrufen. Diese Routinen
     führen keine Ein- oder Ausgabe durch; dies bleibt dem Anwendungspro-
     gramm überlassen. Durch diese Übernahme eines größeren Aufgabenbe-
     reichs kontrolliert ein Anwendungsprogramm sein eigenes Ein-/Ausgabe-
     modell.

   Bibliotheksnamen

     Die im Zusammenhang mit der Bibliothek verwendeten Namen haben fol-
     gende Formen:

     elfname
          Diese klassenunabhängigen Namen führen einen Dienst name für das
          Programm aus.

     elf32name
          Dienstnamen mit einer angegebenen Klasse, wie zum Beispiel 32,
          zeigen an, daß sie nur mit der entsprechenden Klasse von Dateien
          arbeiten.

     ElfType
          Datentypen können ebenfalls klassenunabhängig sein und werden
          durch Type unterschieden.

     Elf32Type
          Klassenabhängige Datentypen enthalten einen Klassennamen, wie zum
          Beispiel 32.

     ELFCCMD
          Einige Funktionen erhalten Kommandos, die ihre Aktionen kontrol-
          lieren. Diese Werte sind Elemente des Aufzählungstyps ElfCmd;
          sie reichen von Null bis ELFCNUM-1.

     ELFFFLAG
          Einige Funktionen erhalten Optionen, die den Bibliotheksstatus
          und/oder die Aktionen kontrollieren. Die Optionen sind Bitmasken,
          die auch kombiniert werden können.






Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     ELF32FSZTYPE
          Solche Konstanten stellen die Größe in Bytes in der Dateidarstel-
          lung der grundsätzlichen ELF-Typen für die 32-Bit-Dateiklasse
          dar. Siehe elffsize() für weitere Informationen.

     ELFKKIND
          Die Funktion elfkind() identifiziert KIND (den Typ) der Datei,
          die mit dem ELF-Deskriptor verknüpft ist. Diese Werte sind Werte
          des Aufzählungstyps ElfKind; sie reichen von Null bis
          ELFKNUM-1.

     ELFTTYPE
          Wenn eine Dienstfunktion, wie zum Beispiel elfxlate(), mit meh-
          reren Typen operiert, können Namen dieser Form den gewünschten
          Typ TYPE angeben. Beispielsweise wird ELFTEHDR direkt
          Elf32Ehdr zugeordnet. Diese Werte sind Elemente des Aufzählungs-
          typs ElfType; sie reichen von Null bis ELFTNUM-1.

     Die Informationen in den ELF-Include-Dateien sind in allgemeine und
     prozessorabhängige Bereiche unterteilt. Ein Programm kann Informatio-
     nen über den Prozessor durch das Einbinden der entsprechenden
     Include-Datei erhalten: sys/elfNAME.h, wobei NAME dem Prozessornamen
     entspricht, wie er im ELF-Dateikopf verwendet wird.
     _________________________
    | Symbol|  Prozessor     |
    |_______|________________|
    | M32   |  AT&T WE 32100 |
    |_______|________________|
    | SPARC |  SPARC         |
    |_______|________________|
    | 386   |  Intel 80386   |
    |_______|________________|
    | 486   |  Intel 80486   |
    |_______|________________|
    | 860   |  Intel 80860   |
    |_______|________________|
    | 68K   |  Motorola 68000|
    |_______|________________|
    | 88K   |  Motorola 88000|
    |_______|________________|

     Andere Prozessoren werden bei Bedarf dieser Tabelle hinzugefügt. Bei-
     spielsweise kann ein Programm mit Hilfe der folgenden Programmzeilen
     prozessorabhängige Informationen für den Prozessor WE 32100 erhalten:

        #include <libelf.h>
        #include <sys/elfM32.h>

     Ohne das Einbinden von sys/elfM32.h wären nur die allgemeinen ELF-
     Informationen für das Programm sichtbar.




Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Die mathematische Bibliothek libm

     Deklarationen für die mathematischen Funktionen erhalten Sie, indem
     Sie die Include-Datei math.h in Ihren Quelltext einbinden. Dort sind
     auch einige allgemein nützliche Konstanten definiert.

     Die mathematische Bibliothek wird nicht automatisch vom C-Entwick-
     lungssystem dazugebunden. Benutzen Sie beim Compiler-Aufruf die Option
     -l, um die oben angegebenen Bibliotheken zu verwenden (-lm).

     libm besteht aus einem vollständigen Satz von Routinen mit doppelter
     Genauigkeit und einigen Routinen mit einfacher Genauigkeit (gekenn-
     zeichnet durch ein nachgestelltes f). Die Routinen mit einfacher
     Genauigkeit benötigen weniger Rechenzeit bei einer geringeren Genauig-
     keit des Ergebnisses. Einige ausgewählte Routinen sind auf minimale
     Laufzeit optimiert. Die optimierten Routinen sind: sin(), cos(),
     tan(), atan(), atan2(), exp(), log(), log10(), pow() und sqrt(), sowie
     deren Entsprechungen mit einfacher Genauigkeit.

BEGRIFFSERKLÄRUNGEN
     In diesem Abschnitt werden einige im folgenden immer wieder verwendete
     Begriffe erläutert. Die Begriffe sind alphabetisch sortiert.

   Besondere Prozesse

     Die Prozesse mit den Prozeßnummern 0 und 1 sind Sonderprozesse, sie
     werden als proc0 und proc1 bezeichnet [siehe auch kill(2)]. proc0 ist
     der Prozeß-Scheduler. proc1 ist der Initialisierungsprozeß (init).
     proc1 ist der Ur-Vaterprozeß jedes anderen Prozesses im System und
     wird zur Steuerung der Prozeßstruktur verwendet.

   Bezeichner für gemeinsam benutzten Speicher

     Ein Bezeichner für gemeinsam benutzten Speicher (shmid - shared memory
     identifier) ist eine positive, ganze Zahl, die von einem Systemaufruf
     shmget bereitgestellt wird. Jeder shmid repräsentiert ein Speicherseg-
     ment (das als gemeinsam benutztes Speichersegment bezeichnet wird) und
     eine zugehörige Datenstruktur. Es ist zu beachten, daß diese gemeinsam
     benutzten Speichersegmente durch den Benutzer explizit entfernt werden
     müssen, nachdem der letzte Verweis in diese gelöscht worden ist. Die
     Datenstruktur wird mit shmidds bezeichnet und enthält folgende Ele-
     mente:

     struct  ipcperm  shmperm;     /* Struktur für Zugriffsrechte der
                                        Operationen */
     int               shmsegsz;    /* Größe des Segments */
     struct  anon-map  *shmamp;     /* Zeiger auf Bereichsstruktur */
     ushort            shmlkcnt;    /* Anzahl der gleichzeitigen Sperren */
     pidt             shmlpid;     /* Prozeßnummer der letzten Operation */
     pidt             shmcpid;     /* Prozeßnummer des Erstellers */
     ulong             shmnattch;   /* Anzahl der aktuellen Anschlüsse */
     ulong             shmcnattch;  /* Verwendung nur für shminfo */


Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     timet            shmatime;    /* Zeitpunkt des letzten Anschlusses */
     long              shmpad1;     /* reserviert */
     timet            shmdtime;    /* Zeitpunkt der letzten Trennung */
     long              shmpad2;     /* reserviert */
     timet            shmctime;    /* Zeitpunkt der letzten Änderung */
                                     /* Zeiten gemessen in Sekunden seit */
                                     /* 00:00:00 GMT, 1. Januar 1970 */
     long              shmpad3;     /* reserviert */
     long              shmpad4[4];  /* reserviert */

     Es folgt eine Beschreibung der einzelnen Felder der shmidds-Struktur:

     shmperm    Ist eine ipcperm-Struktur zur Beschreibung der Zugriffs-
                 rechte für die Operationen auf dem gemeinsam benutzten
                 Speicher (siehe unten). Diese Struktur besteht aus folgen-
                 den Elementen:

                 uidt      cuid;    /* Benutzernummer des Erstellers */
                 gidt      cgid;    /* Gruppennummer des Erstellers */
                 uidt      uid;     /* Benutzernummer */
                 gidt      gid;     /* Gruppennummer */
                 modet     mode;    /* Schreib-/Lese-Erlaubnis */
                 ulong      seq;     /* Abfolgenummer für Platzbenutzung */
                 keyt      key;     /* Schlüssel */
                 long       pad[4];  /* reserviert */

     shmsegsz   die Größe des gemeinsam benutzten Speichersegments in
                 Bytes.

     shmcpid    die Prozeßnummer des Prozesses, der den Bezeichner des
                 gemeinsam benutzten Speichers bereitgestellt hat.

     shmlpid    Prozeßnummer des letzten Prozesses, der eine shmop-
                 Operation ausgeführt hat.

     shmnattch  Anzahl der Prozesse, die mit diesem Segment momentan ver-
                 bunden sind.

     shmatime   Zeitpunkt der letzten shmat-Operation [siehe auch
                 shmop(2)].

     shmdtime   Zeitpunkt der letzten shmdt-Operation [siehe auch
                 shmop(2)].

     shmctime   Zeitpunkt der letzten shmctl-Operation, bei der eines der
                 Elemente der obigen Struktur geändert wurde.








Seite 9                      Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Bezeichner für Nachrichten-Warteschlange

     Der Bezeichner einer Nachrichten-Warteschlange (msqid) ist eine posi-
     tive ganze Zahl, die von einem Systemaufruf msgget() zurückgeliefert
     wird. Jede msqid hat eine zugehörige Nachrichten-Warteschlange und
     eine Datenstruktur. Die Datenstruktur wird als msqidds bezeichnet und
     enthält folgende Teile:

     struct  ipcperm  msgperm;
     struct  msg       *msgfirst;
     struct  msg       *msglast;
     ulong             msgcbytes;
     ulong             msgqnum;
     ulong             msgqbytes;
     pidt             msglspid;
     pidt             msglrpid;
     timet            msgstime;
     long              msgpad1;            /* reserviert */
     timet            msgrtime;
     long              msgpad2;            /* reserviert */
     timet            msgctime;
     long              msgpad3;            /* reserviert */
     long              msgpad4[4];         /* reserviert */

     Es folgt eine Beschreibung der Komponenten der msgidds-Struktur:

     msgperm    Ist eine ipcperm-Struktur, die die Rechte für den Nach-
                 richtenbetrieb (siehe unten) angibt. Diese Struktur weist
                 folgende Elemente auf:

                 uidt   cuid;      /* Benutzernummer des Erstellers */
                 gidt   cgid;      /* Gruppennummer des Erstellers */
                 uidt   uid;       /* Benutzernummer */
                 gidt   gid;       /* Gruppennummer */
                 modet  mode;      /* Schreib-/Lese-Erlaubnis */
                 ulong   seq;       /* Belegungsliste der Einträge */
                 keyt   key;       /* Schlüssel */
                 long    pad[4];    /* reserviert */

     *msgfirst  Zeiger auf die erste Nachricht in der Warteschlange.

     *msglast   Zeiger auf die letzte Nachricht in der Warteschlange.

     msgcbytes  aktuelle Anzahl der Bytes in der Warteschlange.

     msgqnum    Anzahl der sich zum jeweiligen Zeitpunkt in der Warte-
                 schlange befindenden Nachrichten.

     msgqbytes  Höchstzahl der in einer Warteschlange zugelassenen Bytes.

     msglspid   Prozeßnummer des letzten Prozesses, der eine msgsnd-
                 Operation ausgeführt hat.


Seite 10                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     msglrpid   Prozeßnummer des letzten Prozesses, der eine msgrcv-
                 Operation ausgeführt hat.

     msgstime   Zeitpunkt der letzten msgsnd-Operation.

     msgrtime   Zeitpunkt der letzten msgrcv-Operation.

     msgctime   Zeitpunkt der letzten msgctl-Operation, die eines der Ele-
                 mente der obigen Struktur geändert hat.

   Dateideskriptor

     Ein Dateideskriptor ist eine kleine, ganze Zahl, die zur Ausführung
     von E/A-Operationen auf einer Datei verwendet wird. Der Wert eines
     Dateideskriptors liegt im Bereich von 0 bis (NOFILES-1). Ein Prozeß
     darf gleichzeitig nicht mehr als NOFILES Dateideskriptoren geöffnet
     haben. Ein Dateideskriptor wird von Systemaufrufen, wie z. B. open()
     oder pipe() als Ergebnis zurückgegeben. Dateideskriptoren werden als
     Argument in Funktionen wie read(), write(), ioctl() und close() ver-
     wendet.

   Dateiname

     Dateinamen bestehen aus 1 bis NAMEMAX Zeichen. Sie können zur
     Bezeichnung einer normalen Datei, einer Gerätedatei oder eines Ver-
     zeichnisses dienen.

     Diese Zeichen können aus dem Satz aller Zeichenwerte mit Ausnahme von
     \0 (Null) und dem ASCII-Code für / (Schrägstrich) ausgewählt werden.

     Bitte beachten Sie, daß im Normalfall die Zeichen * , ?, [ oder ]
     nicht als Teil von Dateinamen verwendet werden sollten, weil die Shell
     diesen Zeichen jeweils eine besondere Bedeutung zumißt [siehe sh(1)].
     Auch die Verwendung nicht druckbarer Zeichen in Dateinamen sollte ver-
     mieden werden.

     Ein Dateiname wird manchmal als Komponente eines Pfadnamens verwendet.
     Die Interpretation einer Komponente eines Pfadnamens ist abhängig von
     dem Wert von NAMEMAX, angewendet auf den Präfix einer solchen Kompo-
     nente. Wenn irgendeine Komponente länger als NAMEMAX Zeichen ist,
     sollte dies als Fehlerbedingung angesehen werden. Andernfalls sollte
     die Implementierung die ersten NAMEMAX Bytes der Komponente des Pfad-
     namens verwenden.

   Dateizugriffsrechte

     Die Erlaubnis zum Lesen, Schreiben und Ausführen/Durchsuchen einer
     Datei wird einem Prozeß erteilt, wenn einer oder mehrere der nachste-
     henden Punkte erfüllt sind:

     -  Die effektive Benutzernummer des Prozesses ist die des Systemver-
        walters.


Seite 11                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     -  Die effektive Benutzernummer des Prozesses entspricht der Benutzer-
        nummer des Eigentümers der Datei, und das entsprechende Zugriffsbit
        des "Eigentümer"-Teils (0700) des Dateimodus ist gesetzt.

     -  Die effektive Benutzernummer des Prozesses entspricht nicht der
        Benutzernummer des Eigentümers der Datei, aber die effektive Grup-
        pennummer des Prozesses entspricht der Dateigruppe, und das ent-
        sprechende Zugriffsbit des "Gruppen"-Teils (0070) des Dateimodus
        ist gesetzt.

     -  Die effektive Benutzernummer des Prozesses entspricht nicht der
        Benutzernummer des Eigentümers der Datei, die effektive Gruppennum-
        mer des Prozesses entspricht nicht der Gruppennummer der Datei,
        aber das entsprechende Zugriffsbit des "Andere"-Teils (0007) des
        Dateimodus ist gesetzt.

   Effektive Benutzernummer und effektive Gruppennummer

     Ein aktiver Prozeß hat eine effektive Benutzernummer und eine effek-
     tive Gruppennummer. Sie dienen zur Bestimmung der Rechte für Dateizu-
     griffe (siehe oben). Die effektive Benutzernummer und die effektive
     Gruppennummer entsprechen der realen Benutzernummer des Prozesses bzw.
     der realen Gruppennummer, wenn der Prozeß oder einer seiner Vorgänger
     nicht aus einer Datei entstanden ist, bei der das s-Bit (das Bit für
     die Benutzereinstellung oder für die Gruppennummerneinstellung)
     gesetzt wurde [siehe auch exec(2)].

   Hintergrund-Prozeßgruppe

     Jede Prozeßgruppe, die keine Vordergrund-Prozeßgruppe mit einer Ver-
     bindung zu einem steuernden Terminal ist.

   Lebensdauer eines Prozesses

     Die Lebensdauer eines Prozesses beginnt mit seiner Erzeugung durch
     fork() und endet mit seinem Ende mit exit(), sobald seine Beendigung
     durch seinen Vaterprozeß bestätigt wurde. Siehe dazu auch wait(2).

   Lebensdauer einer Prozeßgruppe

     Die Lebensdauer einer Prozeßgruppe beginnt mit ihrer Erzeugung durch
     ihren Prozeßgruppenleiter und endet mit dem Ende der Lebensdauer des
     letzten Prozesses der Prozeßgruppe, oder wenn der letzte Prozeß die
     Gruppe verläßt.

   Lebensdauer einer Sitzung

     Die Lebensdauer einer Sitzung beginnt mit der Erzeugung der Sitzung
     durch den Anmeldeprozeß und endet mit dem Ende der Lebensdauer des
     letzten Prozesses der Sitzung, oder wenn der letzte Prozeß die Sitzung
     verläßt.



Seite 12                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Lese-Warteschlange

     Die Nachrichten-Warteschlange in einem Modul oder einem Treiber eines
     Streams, die Nachrichten enthält, die sich stream-aufwärts bewegen.

   Modul

     Ein Modul ist eine Einheit, die Verarbeitungsroutinen für Eingabe- und
     Ausgabedaten enthält. Es existiert immer in der Mitte eines Streams
     zwischen dem Kopf des Streams und einem Treiber. Ein Modul ist das
     STREAMS-Gegenstück zu den Kommandos in einer Shell-Pipeline, wobei ein
     Modul jedoch ein Funktionspaar enthält, das einen unabhängigen bidi-
     rektionalen Datenfluß (stream-abwärts und stream-aufwärts) sowie die
     Bearbeitung der Daten ermöglicht.

   Multiplexer

     Ein Multiplexer ist ein Treiber, der den Anschluß von Streams, die mit
     mehreren Benutzerprozessen verbunden sind, an einen einzigen Treiber,
     oder den Anschluß von mehreren Treibern an einen einzigen Benutzerpro-
     zeß ermöglicht. STREAMS liefert keinen allgemeinen Multiplexer-Trei-
     ber, stellt jedoch Einrichtungen für dessen Konstruktion und für den
     Anschluß von Stream-Konfigurationen in Multiplexschaltungen zur Verfü-
     gung.

   Nachricht

     Eine oder mehrere Daten- oder Informationsblöcke mit den zugehörigen
     STREAMS-Steuerstrukturen in einem Stream. Nachrichten können von ver-
     schiedenen definierten Typen sein, die jeweils den Inhalt der Nach-
     richt kennzeichnen. Mit Nachrichten werden Kommunikations-Daten inner-
     halb eines Streams übertragen.

   Nachrichten-Warteschlange

     Eine verkettete Liste von Nachrichten in einem Stream, die auf die
     Verarbeitung durch ein Modul oder einen Treiber warten.

   Pfadname

     Ein Pfadname ist eine mit einem Nullzeichen endende Zeichenkette, die
     mit einem optionalen Schrägstrich /, beginnt, gefolgt von Null oder
     mehr Dateiverzeichnisnamen, die durch Schrägstriche voneinander
     getrennt sind. Wahlweise kann danach noch ein Dateiname folgen.

     Wenn ein Pfadname mit einem Schrägstrich beginnt, beginnt die Pfadsu-
     che beim Root-Verzeichnis. Andernfalls beginnt die Suche beim aktuel-
     len Dateiverzeichnis.

     Ein alleinstehender Schrägstrich bezeichnet das Root-Dateiverzeichnis.




Seite 13                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Prozeßgruppe

     Jeder Prozeß im System ist Mitglied einer Prozeßgruppe, die durch eine
     Prozeßgruppennummer gekennzeichnet ist. Jeder Prozeß, der nicht Pro-
     zeßgruppenleiter ist, kann eine neue Prozeßgruppe erzeugen und deren
     Leiter werden. Jeder Prozeß, der nicht Prozeßgruppenleiter ist, kann
     sich einer existierenden Prozeßgruppe anschließen, die derselben Sit-
     zung angehört wie der Prozeß. Ein neu erzeugter Prozeß gehört zu der
     Prozeßgruppe seines Vaterprozesses.

   Prozeßgruppenleiter

     Ein Prozeßgruppenleiter ist jeder Prozeß, dessen Prozeßgruppennummer
     gleich seiner Prozeßnummer ist.

   Prozeßgruppennummer

     Jeder aktive Prozeß ist Mitglied einer Prozeßgruppe, dargestellt durch
     eine positive, ganze Zahl, die Prozeßgruppennummer. Diese Nummer ist
     die Prozeßnummer des Prozeßgruppenleiters. Mit dieser Gruppierung ist
     das Senden von Signalen an zusammengehörige Prozesse möglich [siehe
     auch kill(2)].

   Prozeßnummer

     Jeder aktive Prozeß im System wird eindeutig durch eine positive ganze
     Zahl gekennzeichnet, die Prozeßnummer. Eine Prozeßnummer kann durch
     das System nicht wieder verwendet werden, bevor nicht die Lebensdauer
     des Prozesses, der Prozeßgruppe und der Sitzung für jede Prozeßnummer,
     Prozeßgruppe und für jede Sitzungsnummer gleich der fraglichen Prozeß-
     nummer beendet ist.

   Prozeßnummer des Vaterprozesses

     Ein neuer Prozeß wird von einem gegenwärtig aktiven Prozeß erzeugt
     [siehe auch fork(2)]. Die Vaterprozeßnummer eines Prozesses ist die
     Prozeßnummer des jeweiligen Erzeugers.

   Reale Benutzerkennung und reale Gruppenkennung

     Jeder am System zugelassene Benutzer wird durch eine postive, ganze
     Zahl (0 bis MAXUID) identifiziert, der sogenannten realen Benutzerken-
     nung.

     Jeder Benutzer ist auch Mitglied einer Gruppe. Die Gruppe wird durch
     eine positive ganze Zahl gekennzeichnet, die als reale Gruppennummer
     bezeichnet wird.

     Ein aktiver Prozeß hat eine reale Benutzernummer und eine reale Grup-
     pennummer, die auf die reale Benutzernummer bzw. die reale Gruppennum-
     mer des Benutzers gesetzt werden, der für die Erstellung des Prozesses
     verantwortlich ist.


Seite 14                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Root-Dateiverzeichnis und aktuelles Arbeitsverzeichnis

     Zu jedem Prozeß gehört das Konzept eines Root-Dateiverzeichnisses und
     ein aktuelles Dateiverzeichnis, um Pfadnamen auflösen zu können. Das
     Root-Dateiverzeichnis eines Prozesses muß nicht das Root-Dateiver-
     zeichnis des Root-Dateisystems sein.

   Schreib-Warteschlange

     Nachrichten-Warteschlange in einem Modul oder dem Treiber eines
     Streams, die Nachrichten enthält, die sich stream-abwärts bewegen.

   Semaphor-Bezeichner

     Ein Semaphor-Bezeichner (semid) ist eine positive ganze Zahl, die von
     einem Systemaufruf semget bereitgestellt wird. Jede semid verfügt über
     einen Satz Semaphore und eine damit verbundene Datenstruktur. Die
     Datenstruktur wird mit semidds bezeichnet und enthält folgende Ele-
     mente:

     struct  ipcperm  semperm;    /* Struktur für Zugriffsrechte von
                                       Operationen */
     struct  sem       *sembase;   /* Zeiger auf ersten Semaphor im Satz */
     ushort            semnsems;   /* Anzahl der Semaphoren im Satz */
     timet            semotime;   /* Zeitpunkt der letzten Operation */
     long              sempad1;    /* reserviert */
     timet            semctime;   /* Zeitpunkt der letzten Änderung,
                                       Zeiten gemessen in Sekunden
                                       seit 00:00:00 GMT, 1. Jan. 1970 */
     long             sempad2;     /* reserviert */
     long             sempad3[4];  /* reserviert */

     semperm    Ist eine ipcperm-Struktur, die die Zugriffsrechte für
                 Semaphor-Operationen spezifiziert (siehe unten). Diese
                 Struktur besteht aus folgenden Elementen:

                 uidt    cuid;      /* Benutzernummer des Erstellers */
                 gidt    cgid;      /* Gruppennummer des Erstellers */
                 uidt    uid;       /* Benutzernummer */
                 gidt    gid;       /* Gruppennummer */
                 modet   mode;      /* Schreib-/Lese-Erlaubnis */
                 ulong    seq;       /* Belegungsliste der Einträge */
                 keyt    key;       /* Schlüssel */
                 long     pad[4];    /* reserviert */

     semnsems   Anzahl der Semaphore im Satz. Jeder Semaphor im Satz wird
                 durch eine positive, ganze Zahl referenziert, die mit
                 semnum bezeichnet wird. semnum-Werte laufen sequentiell
                 von 0 bis zum Wert von semnsems minus 1.

     semotime   Zeitpunkt der letzten semop-Operation.



Seite 15                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     semctime   Zeitpunkt der letzten semctl-Operation, mit der ein Ele-
                 ment der obigen Struktur verändert wurde.

     Ein Semaphor ist eine Datenstruktur namens sem und enthält folgende
     Elemente:

     ushort    semval;      /* Wert des Semaphors */
     pidt     sempid;      /* pid der letzten Operation */
     ushort    semncnt;     /* # wartend auf semval > cval */
     ushort    semzcnt;     /* # wartend auf semval = 0 */

     semval      Nicht-negative ganze Zahl, die den aktuellen Wert des
                 Semaphors darstellt.

     sempid      Prozeßnummer des letzten Prozesses, der eine Semaphor-
                 Operation auf diesem Semaphor ausgeführt hat.

     semncnt     Anzahl der Prozesse, die zum gegebenen Zeitpunkt zurückge-
                 stellt sind und darauf warten, daß semval dieses Semaphors
                 größer als der aktuelle Wert wird.

     semzcnt     Anzahl der Prozesse, die zum gegebenen Zeitpunkt vorüber-
                 gehend zurückgestellt sind und darauf warten, daß semval
                 dieses Semaphors gleich Null wird.

   Sitzung

     Eine Sitzung ist eine Gruppe von Prozessen, die durch eine gemeinsame
     Kennung, die Sitzungsnummer, gekennzeichnet ist. Sie ist in der Lage,
     eine Verbindung zu einem steuernden Terminal aufzubauen. Jeder Prozeß,
     der nicht Prozeßgruppenleiter ist, kann eine neue Sitzung und eine
     neue Prozeßgruppe erzeugen und wird deren Sitzungsleiter und Prozeß-
     gruppenleiter. Ein neu erzeugter Prozeß gehört zu der Sitzung seines
     Erzeugers.

   Sitzungsleiter

     Ein Sitzungsleiter ist ein Prozeß, dessen Sitzungsnummer gleich seiner
     Prozeßnummer und seiner Prozeßgruppennummer ist.

   Sitzungsnummer

     Jede Sitzung im System wird durch eine positive ganze Zahl gekenn-
     zeichnet, die Sitzungsnummer ist gleich der Prozeßnummer des Sitzungs-
     leiters.

   Steuernder Prozeß

     Ein steuernder Prozeß ist ein Sitzungsleiter, der die Verbindung zu
     dem steuernden Terminal hergestellt hat.




Seite 16                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Steuerndes Terminal

     Ein Terminal, das mit einer Sitzung verbunden ist. Jede Sitzung muß
     mindestens ein steuerndes Terminal zugeordnet haben, und ein steuern-
     des Terminal kann maximal einer Sitzung zugeordnet sein. Bestimmte
     Eingabefolgen vom steuernden Terminal führen dazu, daß Signale an die
     Prozeßgruppe der Sitzung gesendet werden, die dem steuernden Terminal
     zugeordnet ist [siehe dazu termio(7)].

   STREAMS

     Ein Satz von Mechanismen im Systemkern zur Unterstützung der Realisie-
     rung der Netzwerkdienste und Datenkommunikations-Treiber. Er definiert
     Schnittstellen-Standards für Zeichen-Ein-/Ausgabe innerhalb des
     Systemkerns und zwischen dem Systemkern und den Prozessen auf Benutze-
     rebene. Der STREAMS-Mechanismus setzt sich aus Dienstprogramm-
     Routinen, Systemkern-Einrichtungen und einem Satz von Datenstrukturen
     zusammen.

   Stream

     Ein Stream ist ein Vollduplex-Datenpfad innerhalb des Systemkerns zwi-
     schen einem Benutzerprozeß und Treiberroutinen. Die Hauptkomponenten
     sind ein Stream-Kopf, ein Treiber und Null oder mehrere Module zwi-
     schen dem Stream-Kopf und dem Treiber. Ein Stream entspricht einer
     Shell-Pipeline, wobei jedoch Datenfluß und Verarbeitung bidirektional
     sind: stream-abwärts bezeichnet die Richtung vom Stream-Kopf zum Trei-
     ber, stream-aufwärts bezeichnet die Richtung vom Treiber zum Stream-
     Kopf.

   Stream-Kopf

     In einem Stream bildet der Stream-Kopf jenes Ende des Streams, das die
     Schnittstelle zwischen dem Stream und einem Benutzerprozeß darstellt.
     Die Hauptfunktionen des Stream-Kopfes bestehen in der Verarbeitung von
     STREAMS-bezogenen Systemaufrufen und der Weitergabe von Daten und
     Informationen zwischen einem Benutzerprozeß und dem Stream.

   Systemverwalter

     Ein Prozeß wird als Systemverwalter-Prozeß anerkannt und erhält beson-
     dere Privilegien, wie zum Beispiel Unabhängigkeit von den Dateizu-
     griffsrechten, wenn die effektive Benutzernummer gleich 0 ist.

   Treiber

     In einem Stream bildet der Treiber die Schnittstelle zwischen der
     peripheren Hardware und dem Stream. Ein Treiber kann auch ein Pseudo-
     Treiber sein, wie z. B. ein Multiplexer oder ein Protokoll-Treiber
     [siehe auch log(7)], der nicht direkt mit einer Geräteschnittstelle in
     Verbindung steht.



Seite 17                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

   Verzeichnis

     Dateiverzeichnisse organisieren Dateien in ein hierarchisches Dateisy-
     stem, wobei die Verzeichnisse die Knoten im System darstellen. In
     einem Dateiverzeichnis werden alle Dateien, einschließlich Verzeich-
     nissen, die sich direkt unter ihm in der Hierarchie befinden, katalo-
     gisiert. Dateiverzeichnis-Einträge werden als Verweise bezeichnet. Ein
     Dateiverzeichnis enthält wenigstens zwei Verweise, "." und "..". Der
     Verweis "." verweist auf das Dateiverzeichnis selbst, und ".." ver-
     weist auf das übergeordnete Dateiverzeichnis. Das Root-Verzeichnis als
     oberster Knoten der Hierarchie verweist auf sich selbst als übergeord-
     netes Verzeichnis. Der Pfadname des Root-Verzeichnisses ist / und das
     übergeordnete Verzeichnis des Root-Verzeichnisses ist /.

   Vordergrund-Prozeßgruppe

     Jede Sitzung mit einem zugeordneten steuernden Terminal unterscheidet
     eine Prozeßgruppe der Sitzung als die Vordergrund-Prozeßgruppe des
     steuernden Terminals. Diese Gruppe hat einige Vorrechte bei Zugriffen
     auf das steuernde Terminal, die den Hintergrund-Prozeßgruppen unter-
     sagt sind.

   Zugriffsrechte auf gemeinsam benutzten Speicher

     Bei den Systemaufrufen shmop() und shmctl() wird die für eine Opera-
     tion benötigte Erlaubnis wie folgt interpretiert:

     00400   Lesen durch Benutzer
     00200   Schreiben durch Benutzer
     00040   Lesen durch Gruppe
     00020   Schreiben durch Gruppe
     00004   Lesen durch Andere
     00002   Schreiben durch Andere

     Lese- und Schreiberlaubnis auf einem shmid werden einem Prozeß
     gewährt, wenn einer oder mehrere der nachstehenden Punkte gegeben
     sind:

     -  Die effektive Benutzernummer des Prozesses entspricht der des
        Systemverwalters.

     -  Die effektive Benutzernummer des Prozesses entspricht shmperm.cuid
        oder shmperm.uid in der Datenstruktur zu shmid, und das entspre-
        chende Bit des "Benutzer"-Teils (0600) von shmperm.mode ist
        gesetzt.

     -  Die effektive Gruppennummer des Prozesses entspricht shmperm.cgid
        oder shmperm.gid, und das entsprechende Bit des "Gruppe"-Teils
        (060) von shmperm.mode ist gesetzt.

     -  Das entsprechende Bit des "Andere"-Teils (06) von shmperm.mode ist
        gesetzt.


Seite 18                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     -  Andernfalls wird die entsprechende Erlaubnis verweigert.

   Zugriffsrechte für Nachrichten-Warteschlangen

     In den Beschreibungen der Systemaufrufe msgop() und msgctl() wird die
     für eine Operation erteilte Erlaubnis wie folgt interpretiert:

     00400   Lesen durch Benutzer
     00200   Schreiben durch Benutzer
     00040   Lesen durch Gruppe
     00020   Schreiben durch Gruppe
     00004   Lesen durch Andere
     00002   Schreiben durch Andere

     Die Schreib- und Lese-Erlaubnis auf einem msqid werden einem Prozeß
     gewährt, wenn einer oder mehrere der nachfolgenden Punkte gegeben
     sind:

     -  Die effektive Benutzernummer des Prozesses ist gleich der des
        Systemverwalters.

     -  Die effektive Benutzernummer des Prozesses ist gleich msgperm.cuid
        oder msgperm.uid in der Datenstruktur, die zu msqid gehört, und
        das entsprechende Bit des "Benutzer"-Teils (0600) von msgperm.mode
        ist gesetzt.

     -  Die effektive Gruppennummer des Prozesses entspricht msgperm.cgid
        oder msgperm.gid, und das entsprechende Bit des "Gruppen"-Teils
        (060) von msgperm.mode ist gesetzt.

     -  Das entsprechende Bit des "Andere"-Teils (006) von msgperm.mode
        ist gesetzt.

     Andernfalls wird die entsprechende Erlaubnis nicht erteilt.

   Zugriffsrechte für Semaphor-Operationen

     In der Beschreibung der Systemaufrufe semop() und semctl() wird die
     für eine Operation benötigte Erlaubnis wie folgt interpretiert:

     00400   Lesen durch Benutzer
     00200   Ändern durch Benutzer
     00040   Lesen durch Gruppe
     00020   Ändern durch Gruppe
     00004   Lesen durch Andere
     00002   Ändern durch Andere

     Die Erlaubnis, lesend und ändernd auf einen semid zuzugreifen, wird
     einem Prozeß gewährt, wenn einer oder mehrere der nachstehenden Punkte
     gegeben sind:




Seite 19                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     -  Die effektive Benutzernummer des Prozesses entspricht der des
        Systemverwalters.

     -  Die effektive Benutzernummer des Prozesses entspricht semperm.cuid
        oder semperm.uid in der Datenstruktur zu semid, und das entspre-
        chende Bit des "Benutzer"-Teils (0600) von semperm.mode ist
        gesetzt.

     -  Die effektive Gruppennummer des Prozesses entspricht semperm.cgid
        oder semperm.gid, und das entsprechende Bit des "Gruppe"-Teils
        (060) von semperm.mode ist gesetzt.

     -  Das entsprechende Bit des "Andere"-Teils (006) von semperm.mode
        ist gesetzt.

     Andernfalls wird die entsprechende Erlaubnis verweigert.

FEHLERNUMMERN
     Bei den meisten der im folgenden beschriebenen Funktionen gibt es
     einen oder mehrere Fehlerstatuswerte.

     Ein Fehler wird in den meisten Fällen durch einen Rückgabewert ange-
     zeigt. Dies ist fast immer der Wert -1 oder der Nullzeiger; Einzelhei-
     ten sind in den entsprechenden Beschreibungen zu finden. Zusätzlich
     wird eine Fehlernummer in der externen Variablen errno zur Verfügung
     gestellt. errno wird bei erfolgreichen Aufrufen nicht zurückgesetzt.
     Bei einigen Funktionen kann nur durch Prüfen von errno festgestellt
     werden, ob die Funktion erfolgreich war.

     Nachstehend wird eine komplette Liste der Fehlernummern und ihrer
     Bezeichnungen gegeben, wie sie in errno.h [siehe errno(5)] definiert
     sind. Wenn die Bedeutung der Fehlernummer bei einer Funktion von der
     hier angegebenen abweicht, ist das bei der Beschreibung der Funktion
     angegeben.

     1 EPERM
          Nicht Eigentümer. Typischerweise tritt dieser Fehler auf, wenn
          versucht wurde, eine Datei auf eine Weise zu ändern, die dem
          Eigentümer oder Systemverwalter vorbehalten ist. Bei normalen
          Benutzern kann dieser Fehler auch auftreten, wenn sie versuchen,
          Maßnahmen auszuführen, die dem Systemverwalter vorbehalten sind.

     2 ENOENT
          Datei oder Dateiverzeichnis unbekannt. Es wurde der Name einer
          Datei oder eines Dateiverzeichnisses in einem Pfadnamen verwen-
          det, der vorhanden sein sollte, aber nicht vorhanden ist.

     3 ESRCH
          Prozeß unbekannt. Es kann kein Prozeß gefunden werden, der dem
          durch PID in der Routine kill() oder ptrace() angegebenen Prozeß
          entspricht.



Seite 20                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     4 EINTR
          Unterbrochener Systemaufruf. Ein asynchrones Signal (z. B.
          interrupt oder quit), das nicht ignoriert werden soll, ist wäh-
          rend eines Systemaufrufs aufgetreten. Bei Wiederaufnahme der Aus-
          führung nach Verarbeitung des Signals wird der unterbrochene
          Systemaufruf anstelle seines normalen Resultats diesen Fehler
          zurückgegeben.

     5 EIO
          Ein-/Ausgabe-Fehler. Ein physischer Ein-/Ausgabe-Fehler ist auf-
          getreten. In einigen Fällen ist es möglich, daß der Fehler erst
          bei dem nächsten Systemaufruf auftritt (z. B. kann ein Fehler bei
          write() nach close() gemeldet werden).

     6 ENXIO
          Gerät oder Adresse nicht verfügbar. Eine Ein-/Ausgabe-Operation
          verwendet ein Gerät, auf das nicht zugegriffen werden kann.

     7 E2BIG
          Argumentliste zu lang. Einem exec()-Aufruf wurde eine Argumentli-
          ste übergeben, die länger als ARGMAX Bytes ist. Die Obergrenze
          für die Länge einer Argumentliste ist die Summe aus der Größe der
          Argumentliste und der Größe aller von der Umgebung exportierten
          Shell-Variablen.

     8 ENOEXEC
          Ungültiges Format der Binärdatei. Es wurde versucht, eine Datei
          auszuführen, für die zwar die entsprechenden Berechtigungen
          gesetzt sind, die jedoch nicht mit einem gültigen Format beginnt
          [siehe auch a.out(4)].

     9 EBADF
          Ungültige Dateinummer. Ein Dateideskriptor bezieht sich nicht auf
          eine offene Datei.

     10 ECHILD
          Keine Sohnprozesse vorhanden. Ein Aufruf von wait() wurde von
          einem Prozeß ausgeführt, der keine Sohnprozesse hat, oder keine,
          auf die er noch warten könnte.

     11 EAGAIN
          Systemresourcen temporär erschöpft. Der fork()-Aufruf war erfol-
          glos, weil die Prozeßtabelle des Systems voll ist oder der Benut-
          zer keine weiteren Prozesse mehr starten darf. Es ist auch mög-
          lich, daß ein Systemaufruf wegen unzureichendem Speicher- oder
          Swap-Bereich gescheitert ist.








Seite 21                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     12 ENOMEM
          Hauptspeicher erschöpft. Während der Ausführung einer exec()-,
          brk()- oder sbrk()-Routine fordert ein Programm mehr Platz an,
          als das System bereitstellen kann. Die maximal verwendbare Spei-
          cherplatzgröße wird durch einen Systemparameter vergeben. Der
          Fehler kann auch dann auftreten, wenn die Anordnung von Text,
          Daten und Stacksegmenten zuviele Segmentregister erfordert, oder
          wenn während der Ausführung einer fork-Routine kein ausreichender
          Swap-Bereich zur Verfügung steht.

     13 EACCES
          Zugriff untersagt. Auf eine Datei wurde in einer Weise zugegrif-
          fen, die durch die Dateizugriffsrechte untersagt ist.

     14 EFAULT
          Adresse oder Parameter ungültig. Das System hat beim Versuch, ein
          Argument einer Routine zu benutzen, einen Hardwarefehler erzeugt.
          errno kann diesen Wert beispielsweise dann erhalten, wenn bei
          einer Routine, die ein Zeigerargument vorsieht, eine ungültige
          Adresse übergeben wird, und zwar zu jedem beliebigen Zeitpunkt,
          zu dem das System diese Bedingung erkennen kann. Da sich Systeme
          in ihrer Fähigkeit, zuverlässig fehlerhafte Adressen zu erkennen,
          unterscheiden, gehört das Übergeben von fehlerhaften Adressen an
          eine Routine zu den Situationen mit einem undefinierten Verhal-
          ten.

     15 ENOTBLK
          Nur bei blockorientierten Geräten möglich. Eine nicht blockorien-
          tierte Datei wurde angegeben, während ein blockorientiertes Gerät
          benötigt wird (z. B. bei einem Aufruf der mount()-Routine).

     16 EBUSY
          Resource nicht verfügbar. Es wurde versucht, ein Gerät einzuhän-
          gen, das bereits eingehängt ist, oder es wurde versucht, ein
          Gerät auszuhängen, auf dem sich eine aktive Datei (offene Datei,
          aktuelle Datei, eingehängte Datei, aktives Textsegment) befindet.
          Diese Fehlersituation tritt auch dann auf, wenn versucht wird,
          die Prozesse zur Benutzerabrechnung zu aktivieren, obwohl diese
          bereits aktiv sind.

     17 EEXIST
          Datei oder Dateiverzeichnis bereits vorhanden. Eine vorhandene
          Datei wurde in einem falschen Zusammenhang angegeben (z. B. beim
          Aufruf der link()-Routine).

     18 EXDEV
          Verweis über Gerätegrenzen hinaus. Es wurde versucht, einen Ver-
          weis auf eine Datei auf einem anderen Gerät zu erzeugen.






Seite 22                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     19 ENODEV
          Gerät existiert nicht. Es wurde versucht, eine falsche Operation
          auf ein Gerät anzuwenden (z. B. Lesen von einem Gerät, auf das
          nur geschrieben werden darf).

     20 ENOTDIR
          Ist kein Verzeichnis. Es wurde kein Dateiverzeichnis angegeben,
          wo ein Dateiverzeichnis benötigt wird [z. B. in einem Pfad-Präfix
          oder als Argument für chdir(2)].

     21 EISDIR
          Ist ein Verzeichnis. Es wurde versucht, direkt in ein Dateiver-
          zeichnis zu schreiben.

     22 EINVAL
          Ungültiges Argument. Ein ungültiges Argument wurde verwendet; ein
          undefiniertes Signal wurde in signal(2) oder kill(2) verwendet.

     23 ENFILE
          Tabelle der offenen Dateien voll. Die Systemtabelle für Dateien
          ist voll, d. h. SYSOPEN Dateien sind geöffnet, und vorübergehend
          können keine weiteren Dateien geöffnet werden.

     24 EMFILE
          Zuviele offene Dateien. Ein Prozeß darf höchstens OPENMAX Datei-
          deskriptoren gleichzeitig verwenden.

     25 ENOTTY
          Kein Typewriter. Es wurde versucht, ein ioctl() auf eine Datei
          anzuwenden, die keine zeichenorientierte Gerätedatei ist.

     26 ETXTBSY
          Programm aktiv. Es wurde versucht, ein direkt ablauffähiges Pro-
          gramm auszuführen, das zu diesem Zeitpunkt zum Schreiben geöffnet
          war. Dies gilt ebenfalls bei einem Versuch, ein ausführbares Pro-
          gramm während seiner Ausführung zu löschen oder zu überschreiben.

     27 EFBIG
          Datei zu lang. Die Länge einer Datei hat die maximale Dateigröße
          oder FCHRMAX überschritten [siehe auch getrlimit(2)].

     28 ENOSPC
          Plattenplatz erschöpft. Während des Schreibens ist kein freier
          Platz mehr auf dem Datenträger übrig. Bei fcntl() ist das Setzen
          oder Aufheben von Datensatzsperren in einer Datei nicht möglich,
          weil das System keine weiteren Datensatz-Einträge übrig hat.

     29 ESPIPE
          Ungültige Positionieranweisung. Ein lseek() wurde in einer Pipe-
          line verwendet.




Seite 23                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     30 EROFS
          Dateisystem nur zum Lesen. Es wurde versucht, eine Datei oder ein
          Dateiverzeichnis in einem Dateisystem mit Schreibschutz zu
          ändern.

     31 EMLINK
          Zu viele Verweise. Es wurde versucht, mehr als die maximal zuläs-
          sige Anzahl von Verweisen (LINKMAX) auf eine Datei zu legen.

     32 EPIPE
          Pipeline unterbrochen. Es wurde versucht, in eine Pipeline zu
          schreiben, für die es keinen Prozeß zum Lesen der Daten gibt.
          Diese Bedingung erzeugt normalerweise ein Signal; der Fehler wird
          zurückgegeben, wenn dieses Signal ignoriert wird.

     33 EDOM
          Mathematisches Argument außerhalb des Definitionsbereichs. Das
          Argument einer mathematischen Funktion (3M) liegt außerhalb des
          Definitionsbereichs.

     34 ERANGE
          Resultat nicht darstellbar. Der Wert einer mathematischen Funk-
          tion (3M) kann innerhalb der Gerätegenauigkeit nicht dargestellt
          werden.

     35 ENOMSG
          Keine Nachricht des gewünschten Typs. Es wurde versucht, eine
          Nachricht eines Typs zu empfangen, der in der angegebenen
          Nachrichten-Warteschlange nicht vorhanden ist [siehe auch
          msgop(2)].

     36 EIDRM
          Bezeichner gelöscht. Dieser Fehler wird an Prozesse zurückgege-
          ben, die die Ausführung aufgrund der Entfernung eines Bezeichners
          aus dem Wertebereich der Namen des Interprozeß-Kommunikations-
          system wiederaufnehmen [siehe msgctl(2), semctl(2) und
          shmctl(2)].

     37 ECHRNG
          Kanalnummer nicht im zulässigen Bereich.

     38 EL2NSYNC
          Ebene 2 nicht synchronisiert.

     39 EL3HLT
          Ebene 3 beendet.

     40 EL3RST
          Reset auf Ebene 3.

     41 ELNRNG
          Verweisnummer nicht im zulässigen Bereich.


Seite 24                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     42 EUNATCH
          Protokolltreiber nicht eingerichtet.

     43 ENOCSI
          Keine CSI-Struktur verfügbar.

     44 EL2HLT
          Ebene 2 beendet.

     45 EDEADLK
          Gefahr eines Deadlocks. Ein Deadlock wurde festgestellt und ver-
          mieden. Dieser Fehler bezieht sich auf Datei- und Datensatzsper-
          ren.

     46 ENOLCK
          Keine Datensatzsperren verfügbar. Es sind keine weiteren Sperren
          verfügbar. Die Systemtabelle für Sperren ist voll [siehe
          fcntl(2)].

     47-49
          Reserviert.

     50 EBADE
          Fehlerhafter Austausch-Deskriptor.

     51 EBADR
          Fehlerhafter Anforderungs-Deskriptor.

     52 EXFULL
          Meldungstabellen voll.

     53 ENOANO
          Überlauf in Anode-Tabelle.

     54 EBADRQC
          Fehlerhafter Anforderungscode.

     55 EBADSLT
          Ungültiger Slot.

     56 EDEADLOCK
          Dateisperren-Deadlock.

     57 EBFONT
          Fehlerhaftes Font-Dateiformat.

     58-59
          Reserviert.

     60 ENOSTR
          Kein Stream. Es wurde versucht, die Systemaufrufe putmsg() oder
          getmsg() auf eine Datei anzuwenden, die keine STREAM-Datei ist.


Seite 25                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     61 ENODATA
          Keine Daten verfügbar.

     62 ETIME
          Zeituhr abgelaufen. Die für einen STREAMS-Systemaufruf ioctl()
          gesetzte Zeituhr ist abgelaufen. Die Ursache für diesen Fehler
          ist gerätespezifisch und kann entweder einen Hardware- oder einen
          Software-Fehler anzeigen oder möglicherweise auch einen Zeitwert,
          der für die bestimmte Funktion zu klein ist. Der Status der
          ioctl()-Funktion ist unbestimmt.

     63 ENOSTR
          Keine weiteren Betriebsmittel für STREAMS verfügbar. Während
          eines STREAMS-open standen entweder keine STREAMS-Warteschlangen
          oder keine STREAMS-Kopfdatenstrukturen zur Verfügung. Dies ist
          eine vorübergehende Fehlersituation; sobald andere Prozesse Res-
          sourcen freigeben, ist der Fehler behoben.

     64 ENONET
          Rechner nicht an das Netzwerk angeschlossen.

     65 ENOPKG
          Paket nicht installiert. Dieser Fehler tritt auf, wenn der Benut-
          zer die Verwendung eines Systemaufrufs versucht, der Teil eines
          nicht installierten Pakets ist.

     66 EREMOTE
          Objekt ist remote (fernes Objekt).

     67 ENOLINK
          Verweis wurde abgeschnitten.

     68 EADV
          Anmeldefehler.

     69 ESRMNT
          Srmount-Fehler.

     70 ECOMM
          Kommunikationsfehler beim Senden.

     71 EPROTO
          Protokollfehler. Dieser Fehler ist gerätespezifisch, steht im
          allgemeinen jedoch nicht in Zusammenhang mit einem Hardware-
          Ausfall.

     72-73
          Reserviert.

     74 EMULTIHOP
          Kein Überspringen möglich.



Seite 26                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     75-76
          Reserviert.

     77 EBADMSG
          Keine zulässige Daten-Nachricht. Bei einem Systemaufruf read(),
          getmsg() oder ioctl() auf einem STREAMS-Gerät ist etwas an den
          Kopf der Warteschlange gelangt, das nicht verarbeitet werden
          kann. Was dies ist, hängt jeweils vom verwendeten Systemaufruf
          ab:

          read()    Steuerinformationen oder ein weitergereichter Dateide-
                    skriptor
          getmsg()  ein weitergereichter Dateideskriptor
          ioctl()   Steuer- oder Dateninformationen

     78 ENAMETOOLONG
          Dateiname zu lang. Die Länge eines Pfadnamen-Arguments über-
          schreitet PATHMAX Zeichen, oder die Länge überschreitet NAMEMAX
          [siehe limits(4)].

     79 EOVERFLOW
          Wert ist für den definierten Datentyp zu groß.

     80 ENOTUNIQ
          Name im Netzwerk nicht eindeutig.

     81 EBADFD
          Dateideskriptor in falschem Zustand. Entweder verweist ein Datei-
          deskriptor nicht auf eine geöffnete Datei, oder ein Lesezugriff
          wurde auf eine Datei versucht, die nur zum Schreiben geöffnet
          wurde.

     82 EREMCHG
          Adresse für fernen Zugriff geändert.

     83 ELIBACC
          Kein Zugriff auf benötigte, gemeinsam benutzte Bibliothek mög-
          lich. Es wurde versucht, mit exec() ein a.out zu starten, das
          eine gemeinsam benutzte Bibliothek benötigt, und die gemeinsam
          benutzte Bibliothek ist nicht vorhanden, bzw. der Benutzer hat
          keine Erlaubnis für ihre Benutzung.

     84 ELIBBAD
          Zugriff auf beschädigte, gemeinsam benutzte Bibliothek. Es wurde
          versucht, mit exec() ein a.out zu starten, das eine gemeinsam
          benutzte Bibliothek benötigt (um dazugebunden zu werden), und
          exec() konnte die gemeinsam benutzte Bibliothek nicht laden. Die
          gemeinsam benutzte Bibliothek ist wahrscheinlich beschädigt.






Seite 27                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     85 ELIBSCN
          .lib-Abschnitt in a.out beschädigt. Es wurde versucht, mit exec()
          ein a.out auszuführen, das eine gemeinsam benutzte Bibliothek
          (zum Einbinden) benötigt, und in dem .lib-Abschnitt von a.out
          waren fehlerhafte Daten vorhanden. Dem .lib-Abschnitt entnimmt
          exec() die Information, welche gemeinsam benutzten Bibliotheken
          benötigt werden.

     86 ELIBMAX
          Versuch, mehr gemeinsam benutzte Bibliotheken als zulässig einzu-
          binden. Es wurde versucht, mit exec() ein a.out auszuführen, das
          mehr gemeinsam benutzte Bibliotheken benötigt als auf Grundlage
          der aktuellen Konfiguration des Systems zulässig sind.

     87 ELIBEXEC
          Kein direktes Ausführen einer gemeinsam benutzten Bibliothek mög-
          lich. Es wurde versucht, eine gemeinsam benutzte Bibliothek
          direkt mit exec() auszuführen.

     88 EILSEQ
          Unzulässige Bytesequenz. Behandlung mehrerer Zeichen als einzel-
          nes Zeichen.

     89 ENOSYS
          Operation nicht anwendbar.

     90 ELOOP
          Anzahl der symbolischen Verweise während der Traversierung eines
          Pfades überschreitet MAXSYMLINKS.

     91 ERESTART
          Unterbrochener Systemaufruf sollte erneut gestartet werden.

     92 ESTRPIPE
          Wenn Pipe/FIFO, dann kein sleep in Stream-Head.

     93 ENOTEMPTY
          Verzeichnis nicht leer.

     94 EUSERS
          Zu viele Benutzer (für UFS).

     95 ENOTSOCK
          Socket-Operation an Nicht-Socket.

     96 EDESTADDRREQ
          Zieladresse benötigt. Eine benötigte Adresse für eine Operation
          auf einem Endpunkt einer Transportverbindung war nicht angegeben.
          Eine Zieladresse wird benötigt.





Seite 28                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     97 EMSGSIZE
          Nachricht zu lang. Eine Nachricht, die an den Diensterbringer der
          Transportverbindung gesendet wurde, war größer als der interne
          Nachrichtenpuffer oder irgend eine andere Begrenzung im Netzwerk.

     98 EPROTOTYPE
          Falscher Protokolltyp für Socket. Es wurde ein Protokoll angege-
          ben, das die Semantik des geforderten Socket-Typs nicht unter-
          stützt.

     99 ENOPROTOOPT
          Protokoll nicht verfügbar. Eine falsche Version oder eine falsche
          Ebene wurde beim Abfragen oder beim Setzen von Protokolloptionen
          verwendet.

     100-109
          Reserviert.

     110 ENOLIMFILE
          Lnode-Datenbasis nicht geöffnet. Wenn ShareII läuft, werden alle
          Prozesse dem Wurzel-Lnode zugeordnet. Informationen liefert die
          Referenzseite zu dem ShareII-Kommando charge, mit dem die Daten-
          basis geöffnet und geschlossen wird. ShareII schließt die Daten-
          basis automatisch, wenn die aktuelle Lizenz ausläuft.

     111 EPROCLIM
          Prozeß-Limit erreicht. Ein fork()-Aufruf kann fehlschlagen, wenn
          das Prozeß-Limit von ShareII für den Lnode erreicht ist, dem der
          fork-Prozeß zugeordnet ist. Beachten Sie, daß Prozeß-Limits für
          die gesamte Lnode-Hierarchie gelten.

     112 EDISJOINT
          Lnode-Hierarchie ist auseinandergerissen. Entweder durch Datenbe-
          schädigung oder durch die Zwangsentfernung eines Lnode mit
          Abkömmlingen (Unterstrukturen) enthält die Lnode-Datenbasis von
          ShareII einen verwaisten Lnode. Prozesse können einem verwaisten
          Lnode nicht zugeordnet werden.

     113 ENOLOGIN
          Kein Login erlaubt. Der Benutzer hat ein ShareII-Flag
          flag.nologin gesetzt. Die Rückmeldung ist abhängig von diesem
          Flag.

     114 ELOGINLIM
          Login-Limit erreicht. Der Benutzer hat ein ShareII-Flag
          flag.onelogin gesetzt. Die Rückmeldung ist abhängig von diesem
          Flag und das Login-Zählerattribut von ShareII ist für diesen
          Benutzer bereits 1.






Seite 29                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     115 EGROUPLOOP
          Schleife in Lnode-Hierarchie. Beim Aktivieren eines Lnode wurde
          festgestellt, daß der Lnode-Baum tiefer reicht als das konfigu-
          rierte Maximum. Beim Auswechseln eines Vater-Lnode würde die
          Tiefe des verschobenen Lnode das konfigurierte Maximum über-
          schreiten.

     116 ENOATTACH
          Zuordnung zu einem Lnode nicht erlaubt. Der Lnode hat ein
          ShareII-Flag flag.noattach gesetzt. Die Rückmeldung ist abhängig
          von diesem Flag.

     117-119
          Reserviert.

     120 EPROTONOSUPPORT
          Protokoll nicht unterstützt. Das Protokoll ist im aktuellen
          System nicht konfiguriert, oder es existiert dafür keine Unter-
          stützung.

     121 ESOCKTNOSUPPORT
          Socket-Typ nicht unterstützt. Für den angegebenen Socket-Typ ist
          das aktuelle System nicht konfiguriert, oder es existiert dafür
          keine Unterstützung.

     122 EOPNOTSUPP
          Operation am Endpunkt der Transportverbindung nicht unterstützt.
          Beispielsweise der Versuch, eine Verbindung auf einem Endpunkt
          einer Datagram-Transportverbindung zu akzeptieren.

     123 EPFNOSUPPORT
          Protokollfamilie nicht unterstützt. Die Protokollfamilie ist im
          aktuellen System nicht konfiguriert, oder es existiert dafür
          keine Implementierung. Der Fehler tritt bei Internet-Protokollen
          auf.

     124 EAFNOSUPPORT
          Adreßfamile durch Protokollfamilie nicht unterstützt. Eine mit
          dem angeforderten Protokoll nicht kompatible Adresse wurde ver-
          wendet.

     125 EADDRINUSE
          Adresse bereits verwendet. Der Benutzer versuchte, eine Adresse
          zu verwenden, die bereits verwendet wurde, obwohl das Protokoll
          dies nicht zuläßt.

     126 EADDRNOTAVAIL
          Angegebene Adresse kann nicht verwendet werden. Es wurde ver-
          sucht, einen Endpunkt für eine Transportverbindung mit einer
          Adresse einzurichten, die nicht auf dem aktuellen Rechner liegt.




Seite 30                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     127 ENETDOWN
          Netzwerk ist nicht aktiv. Eine Operation fand ein inaktives Netz-
          werk vor.

     128 ENETUNREACH
          Netzwerk nicht erreichbar. Eine Operation wurde an ein nicht
          erreichbares Netzwerk gerichtet.

     129 ENETRESET
          Netzwerk hat Verbindung wegen Reset abgebaut. Der Host, mit dem
          Sie verbunden sind, ist abgestürzt und wurde neu geladen.

     130 ECONNABORTED
          Abbruch der Verbindung durch Software. Aus internen Gründen Ihres
          Hosts bricht die Verbindung ab.

     131 ECONNRESET
          Verbindung durch Kommunikationspartner rückgesetzt. Der Kommuni-
          kationspartner hat die Verbindung abgebrochen. Normalerweise wird
          dies aufgrund einer Zeitüberschreitung oder aufgrund eines Neu-
          starts des Rechners ausgelöst.

     132 ENOBUFS
          Kein Speicherplatz für Datenpuffer verfügbar. Eine Operation auf
          einem Endpunkt einer Transportverbindung konnte aufgrund mangeln-
          den Speicherplatzes für Datenpuffer oder aufgrund einer vollen
          Warteschlange nicht ausgeführt werden.

     133 EISCONN
          Endpunkt einer Transportverbindung ist bereits verbunden. Es
          wurde eine Verbindung angefordert oder mit sendto oder sendmsg
          eine Zieladresse angegeben, obwohl der Endpunkt bereits verbunden
          war.

     135 EUCLEAN
          Struktur muß bereinigt werden.

     136  Reserviert.

     137 ENOTNAM
          Keine XENIX-Namendatei.

     138 ENAVAIL
          Nicht verfügbar.

     139 EISNAM
          Ist eine XENIX-Namendatei.

     140 EREMOTEIO
          Remote-E/A-Fehler.




Seite 31                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     141 EINIT
          Reserviert.

     142 EREMDEV
          Reserviert.

     134 ENOTCONN
          Endpunkt einer Transportverbindung nicht verbunden. Die Anforde-
          rung nach Senden oder Empfangen von Daten konnte nicht erfüllt
          werden, da der Kommunikationsendpunkt nicht verbunden war und
          (beim Senden von Datagrammen) keine Adresse angegeben wurde.

     143 ESHUTDOWN
          Kein Senden nach Schließen des Endpunkts einer Transportverbin-
          dung. Das geforderte Senden von Daten war nicht möglich, da der
          Kommunikationsendpunkt bereits geschlossen wurde.

     144 ETOOMANYREFS
          Zu viele Referenzen: Verbindung nicht möglich.

     145 ETIMEDOUT
          Zeitüberschreitung für Verbindung. Ein Verbindungsaufbau oder
          eine Sendeanforderung scheiterte, weil der Kommunikationspartner
          nicht ordnungsgemäß innerhalb der vorgegebenen Zeit antwortete.
          Das Zeitintervall ist abhängig vom Kommunikationsprotokoll.

     146 ECONNREFUSED
          Verbindung verweigert. Der Verbindungsaufbau war nicht möglich,
          weil der Zielrechner diese verweigert. Dieser Fehler entsteht
          üblicherweise beim Versuch, eine Verbindung zu einem Dienst her-
          zustellen, der auf dem fernen Rechner nicht aktiv ist.

     147 EHOSTDOWN
          Host ist nicht aktiv. Eine Operation des Transportdienstgebers
          ist gescheitert, weil der Zielrechner nicht aktiv ist.

     148 EHOSTUNREACH
          Keine Verbindung zu Host bekannt. Eine Operation des Transport-
          dienstgebers versuchte, einen nicht erreichbaren Host zu verwen-
          den.

     149 EALREADY
          Operation bereits aktiv. Es wurde versucht, eine weitere Opera-
          tion auf einem nichtblockierenden Objekt zu starten, das bereits
          eine Operation bearbeitet.

     150 EINPROGRESS
          Operation jetzt aktiv. Es wurde versucht, eine Operation, die
          eine lange Zeit benötigt (wie zum Beispiel connect), auf einem
          nichtblockierenden Objekt auszuführen.




Seite 32                     Reliant UNIX 5.44               Gedruckt 11/98

intro_prm2(2)                                                 intro_prm2(2)

     151 ESTALE
          Unwirksamer NFS-Dateibezeichner.

     152-157
          Reserviert.

     158 ECANCELED
          Operation beendet.

     159 EHANDLER
          Signal-Behandler existiert.

     160-199
          Reserviert.

     500 EIORESID
          Block nicht vollständig übertragen.

VERZEICHNISSE
     INCDIR    Standardverzeichnis für #include-Dateien (gewöhnlich
               /usr/include bzw. /usr/include/sys)

SIEHE AUCH
     introprm1(1), introprm5(5).

     Kapitel "Objektdateien" in "Leitfaden und Werkzeuge für die Program-
     mierung mit C".



























Seite 33                     Reliant UNIX 5.44               Gedruckt 11/98

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