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