Vorwort

Im ersten Teil dieses Dokuments werden lediglich die unterschiedlichen Standardisierungen und Implementierungen von Unix aufgelistet, wobei im zweiten Abschnitt auf die verschiedenen Headerdateien incl. ihrer Standards und ggf. Implementierungen eingegangen wird.

Während der 80ger Jahre wurden große Anstrengungen unternommen, Unix zu standardisieren. Im Laufe der Jahre hatte sich nämlich eine Vielzahl von unterschiedlichen Unix-Versionen herausgebildet. Um dieser Wucherung von Unix-Versonen mit ihren vielen kleinen Unterschieden Einhalt zu gebieten, wurde der Ruf nach einem Unix-Standard immer lauter.

Nachfolgend werden die Standardisierungen und Implementierungen vorgestellt.

Unix-Standardisierungen

POSIX

Die Standardisierungsbeteuerungen der amerikanischen Unix-User wurden 1986 vom amerikanischen Institute of Electrical and Electronics Engineers (IEEE) unter dem Namen POSIX
[POSIX: Portable Operating System Interface]
aufgegriffen. POSIX ist nicht nur ein Standard, sondern eine ganze Familie von Standards. Der Standard IEEE POSIX 1003.1 für die Betriebssytem-Schnittstellen wurde bereichts 1988 verabschiedet, wobei IEEE POSIX 1003.2 im wesentlichen 1991/1992 abgeschlossen wurde und an zahlreichen weiteren Standards noch gearbeitet wird.

Ende 1990 wurde eine Revision des POSIX-1003.1-Standards durchgeführt. Den dabei verabschiedeten Standard bezeichnet man allgemein als POSIX.1. 1992 wurden einige Erweiterungen dem 1990 verabschiedeten Standard hinzugefügt, woraus die Version 1003.1a von POSIX.1 resultierte.

X/Open XPG

1984 gründeten 10 führende Computerhersteller, darunter AT&T, BULL, DEC, Ercson, Hewlett Packard, ICL, Nixdort, Olivetti, Phillips, Siemens und Unisys, die sogenannte X/Open-Gruppe mit dem Ziel, Industriestandards für offene Systeme zu schaffen.

En wesentliches Ergebnis der Abriet der X/pen-Gruppe war der sogenannte X/Open Portability Guide (XPG), dessen erste Ausgabe 1985 (XPGI) erschien. Die meisten heutigen Unix-Implementierungen unterstützen die 3. Ausgabe des XPG (XPG3), die 1988 herauskam, obwohl zwischenzeitlich eine neue Ausgabe (XPG4) existiert, die Mitte 1992 verabschiedet wurde. XPG4 wurde notwendig, da XPG3 nur auf einen Entwurf des ANSI-C-Standards basierte, der erst 1989 mit einigen Änderungen verabschiedet wurde.

ANSI C

Ende 1989 wurde der ANSI C
[American National Standards Institute ANSI]
- Standard für die Programmiersprache C verabschiedet. Dieser Standard wurde im Jahre 1990 auch als internationaler Standard ISO/IEC 9899:1990 für die Sprache C anerkannt.

Unix-Implementierungen

Während Standardisierungen wie IEEE POSIX, X/Open XPG4, ANSI C von unabhängigen Organisationen durchgeführt werden, werden die igentlichen Unix-Implementierungen, die diesen gesetzten Standards mehr oder wenger genügen, von speziellen Computerfirmen vorgenommen. Ich werde hier nur auf die drei nachfolgenden Implementierungen eingehen.

System V Release 4 (SVR4)

System V Release 4 (SVR4) ist ein Produkt von USL
[Unix System Laboratories]
der Firma AT&T. SVR4 erfüllt die beiden Standards POSIX 1003.1 und X/Open XPG3.

AT&T veröffentlichte 1984 ebenfalls die System V Interface Definition (SVID). 1986 brachte AT>&T eine überarbeitet System V Interface Definition, Issue 2 (SVID-2) heraus, die im wesentlichen XPG3 prägte. SVID-2 lag System V Release 3 (SVR3) zugrunde.
Die 3. Ausgabe des SVID (SVID-3), die die Kompatiblität mit POSIX herstellte, war die Grundlage für die Implementierung von SVR4.
SVR4 enthält auch eine sogenannte Berkeley Compatibility Library, die Funktionen und Kommandos enthält, die sich wieder unter 4.3BSD-Unix verhalten, was jedoch nicht immer dem POSIX-Standard entspricht. Deshalb sollte man bei neuen Applikationen von diesen Funktionen und Kommandos keinen Gebrauch machen.

BSD-Unix

BSD (Berkeley Software Distribution) ist eine Unix-Linie, die an der UCB (Unversity of California at Berkeley) entstanden ist und dort auch weiterentwickelt wird. Die Version 4.2BSD wurde 1983 und die Version 4.3BSD 1986 freigegeben. Beide Versionen liefen auf einem VAX-Minicomputer. Inzwischen ist die Version 4.4BSD erschienen.

Linux

Linux ist ein frei verfügbares Unix-System für PCs, das sich heute sehr großer Beliebtheit erfreut. Es umfaßt Teile der Funktionalität von SVR4, des POSIX-Standards und der BSD-Linie. Wesentliche Teile des Unix-Kerns wurden von Linus Torvalds, einem finnischen Informatik-Stutenden, entwickelt. Er stelle die Programmquellen des Kerns unter die GNU Public Lizense; somit hat jeder das Recht sie zu kopieren.
Die erste Version des Linux-Kerns war Ende 1991 im Internet verfügbar. Es bildete sich schnell eine Gruppe von Linux-Entwicklern, die die Entwicklung dieses Systems vorantrieben. Die Linux-Software wird unter offenen und verteilten Bedingungen entwickelt, was bedeutet, daß jeder, der dazu in der Lage ist, sich beteiligen kann. Das Kommunikationsmedium der Linux-Entwickler ist das Internet.

Headerdateien

Nachfolgende Tabelle gibt einen Überblick darüber, welche Headerdateien von den einzelnen Standards gefordert bzw. in Dein einzelnen Implementierungen angeboten werden. Bei der Kurzbeschreibung steht - wirklich nur kurz - welche Funktion die Datei hat.

Tabelle 1. Standards und Implementierungen
Headerdatei ANSI C POSIX.1 XPG SVR4 BSD Kurzbeschreibung

<assert.h>

YES

NO

NO

YES

YES

Ausdrücke aus einem Programm auf logische Fehler testen

<cpio.h>

NO

YES

NO

YES

NO

cpio-Archiv

<ctype.h>

YES

NO

NO

YES

YES

Einzelne Zeichen überprüfen und umwandeln

<dirent.h>

NO

YES

YES

YES

YES

Verzeichnisse öffnen, lesen und schließen

<errno.h>

YES

NO

NO

YES

YES

Fehlerkonstanten

<fcntl.h>

NO

YES

YES

YES

YES

Manipulation von Dateideskriptoren

<float.h>

YES

NO

NO

YES

YES

Makros für die Genauigkeit, den Wertebereich und andere Eigenschaften der Datentypen float, double und long double

<ftw.h>

NO

NO

YES

YES

NO

Rekursives Durchlaufen eines Dir.-Baums

<grp.h>

NO

YES

YES

YES

YES

Gruppendatei

<langinfo.h>

NO

NO

YES

YES

NO

Sprachenspezifsche Konstanten

<limits.h>

YES

NO

NO

YES

YES

Wertebereiche für ganzzahlige Typen

<locale.h>

YES

NO

NO

YES

YES

Länderspezifische Konstanten (lokalspezifische Zeichen, Währungsinformationen, ..)

<math.h>

YES

NO

NO

YES

YES

Mathematische Funktionen für reelle Gleitpunktzahlen

<nl_types.h>

NO

NO

YES

YES

NO

message - Kataloge (definiert u. a. nl_catd, nl_item
[Siehe auch langinfo.h - language information constants]
)

<pwd.h>

NO

YES

YES

YES

YES

Passwortdatei

<regex.h>

NO

NO

YES

YES

YES

Reguläre Ausdrücke

<search.h>

NO

NO

YES

YES

NO

Suchtabellen

<setjmp.h>

YES

NO

NO

YES

YES

Nichtlokale Sprünge

<signal.h>

YES

NO

NO

YES

YES

Signale

<stdarg.h>

YES

NO

NO

YES

YES

Variabel lange Argumentlisten

<stddef.h>

YES

NO

NO

YES

YES

Standarddefinitionen

<stdio.h>

YES

NO

NO

YES

YES

Grundlegende Funktionen, Makros und Typen für die Ein-/Ausgabe

<stdlib.h>

YES

NO

NO

YES

YES

Funktionen zur Umwandlung von Zahlen, für Speicherverwaltung und ähnliche Aufgaben

<string.h>

YES

NO

NO

YES

YES

Stringfunktionen und Funktionen, die ein Array byteweise bearbeiten

<tar.h>

NO

YES

NO

YES

NO

Erweiterte tar-Definitionen

<termios.h>

NO

YES

YES

YES

YES

Terminal-E/a

<time.h>

YES

NO

NO

YES

YES

Zeit in Sekunden abfragen

<ulimit.h>

NO

NO

YES

YES

NO

Benutzerlimit

<unistd.h>

NO

YES

YES

YES

YES

Symbolische Konstanten

<utime.h>

NO

YES

YES

YES

YES

Dateizeiten

<sys/ipc.h>

NO

NO

YES

YES

YES

System V IPC Systemaufrufe

<sys/msg.h>

NO

NO

YES

YES

NO

message queues

<sys/sem.h>

NO

NO

YES

YES

NO

Semaphoren

<sys/shm.h>

NO

NO

YES

YES

YES

Shared Memory Systemaufrufe

<sys/stat.h>

NO

YES

YES

YES

YES

Dateistatus ermitteln

<sys/times.h>

NO

YES

YES

YES

YES

Abfrage der Prozesszeiten

<sys/types.h>

NO

YES

YES

YES

YES

Forking-Funktionalität für C-Programme

<sys/utsname.h>

NO

YES

YES

YES

NO

Systemname

<sys/wait.h>

NO

YES

YES

YES

YES

Prozesssteuerung