Standarddateien

Unter Unix (und den meisten gängigen anderen Betriebssystemen ebenso) haben neu gestartete Programme drei Dateien zur Verfügung, die nicht explizit geöffnet werden müssen:

Bei interaktiven Systemen sind die Standarddateien meistens mit den Ein- und Ausgabegeräten verbunden, mit denen der Benutzer arbeitet. Also wird Tastatureingabe in der Standardeingabe landen, und alles zur Standardausgabe und zur Standardfehlerausgabe geschriebene wird auf den Bildschirm oder in ein Fenster dort ausgegeben werden.

Bei einem Programmlauf im Stapelbetrieb wird entsprechender Ersatz geschaffen werden, beispielsweise Standardeingabe aus einem Lochkartenstapel oder einem Modem, und die Ausgabekanäle möglicherweise zu einem Drucker.

Wie alle anderen Dateien auch, werden (innerhalb von C-Programmen) diese mit den üblichen Funktionen (read(), write(), fcntl(), dup(), ...) verwendet.

Da die Dateien aber schon bei Programmstart geöffnet sind, ist ein open() beziehungsweise creat() sinnlos. Bei explizit geöffneten Dateien liefern diese beiden Funktionen aber den Dateideskriptor (eine ganze Zahl), der für alle Dateioperationen nötig ist.

Stattdessen werden für die vorgeöffneten Dateien feste Zahlen verwendet, und zwar für die Standardeingabe der Wert 0, für die Standardausgabe 1 und für die Standardfehlerausgabe 2; mit diesen Konstanten als Dateideskriptoren kann man also die Dateifunktionen ansprechen3.7.

Viele Programme verwenden nun für die Ein- und Ausgabe gar keine konkreten Dateien, sondern lesen einfach nur von der Standardeingabe und schreiben das gewünschte Ergebnis zur Standardausgabe. Treten Fehler auf (oder sollen andere Informationen ausgegeben werden, die nicht zum normalen Ergebnis gehören; beispielsweise Warnungen oder statistische Angaben wie der verbrauchten CPU-Zeit), dann wird dafür die Standardfehlerausgabe verwendet.
Anmerkung: Solche Programme, die diesem einfachen Schema Lesen einer Zeichenfolge von der Standardeingabe, irgendwie verarbeiten, Schreiben zur Standardausgabe entsprechen, heißen Filterprogramme.

Dies vereinfacht die Programme deutlich, weil keine Dateinamen erfragt und benutzt werden müssen, und macht sie zumindest unter unixähnlichen Systemen gleichzeitig viel flexibler. Die Zuordnung der drei vordefinierten Dateideskriptoren zu konkreten Dateien oder zur Verknüpfung mit anderen Programmen kann nämlich vom Aufrufer in der Shell vorgenommen werden, ohne daß sich die aufgerufenen Programme darum kümmern müssen.

Auf die Voreinstellung der Standarddateien kann mittels Pipelines (Pipeline: Datenfluß durch mehrere Kommandos) und Ein-/Ausgabeumlenkung (Ein-/Ausgabeumlenkung) Einfluß genommen werden.

Für die folgenden Beispiele wird das Unixkommando sed verwendet, ein ganz typisches Filterprogramm. sed steht für stream editor: das Programm liest einen Zeichenstrom von der Standardeingabe, bearbeitet ihn wie ein Editor anhand von Kommandos, die als Parameter übergeben werden, und schreibt den möglicherweise geänderten Text wieder zur Standardausgabe. Ein Kommando kann mit der Option -e angegeben werden, dem der auszuführende Befehl folgt (siehe man 1 sed). Hier wird nur ein Kommando verwendet, nämlich s (für substitute) zur Ersetzung von Text. Hinter s folgen drei Schrägstriche; zwischen dem ersten und dem zweiten steht der zu ersetzende Text, zwischen dem zweiten und dritten der Ersatztext.

Damit könnte ein Aufruf von sed so aussehen:
klaus@aw35: ~ > sed -e s/gewonnen/verloren/
wir haben die Wahl gewonnen!
wir haben die Wahl verloren!
die anderen sind die schlechteren.
die anderen sind die schlechteren.
Wie gewonnen, so zerronnen!
Wie verloren, so zerronnen!

Ein weiteres in den folgenden Beispielen verwendete Kommando ist fgrep; dieses Kommando bekommt in seiner einfachsten Form ein Argument übergeben, liest seine gesamte Eingabe und leitet zur Ausgabe alle Zeilen weiter, in denen das übergebene Argument enthalten ist:
klaus@athlon1:/lap2/klaus/skript+shellprogrammierung > fgrep onnen
wir haben die Wahl gewonnen!
wir haben die Wahl gewonnen!!
die anderen sind die schlechteren.
Wie gewonnen, so zerronnen!
Wie verloren, so zerronnen!

Hier wird die zweite Eingabezeile unterdrückt, weil sie nicht den Text onnen enthält.



Unterabschnitte
AnyWare@Wachtler.de