17 - 3.5 UNIX-Signale: Umleiten von Dateien [ID:25432]
50 von 160 angezeigt

Und was wir uns als nächstes anschauen ist, wie wir mit POSIX-Miteln die Ausgabe von Programmen

in Dateien umleiten können.

Das Ziel ist, dass ein Programm, das StandardIn und StandardOut verwendet, tatsächlich nicht

etwa auf das Terminal schreibt, sondern aus einer Datei liest bzw. in eine Datei hineinschreibt.

Und wie dies funktioniert ist, indem die beiden darunter liegenden Deskriptoren für StandardOut

und StandardIn umgebogen werden, sodass sie auf eine Datei zeigen.

Das Mittel der Wahl ist an der Stelle der DUP-Systemaufruf.

Dazu schauen wir uns zunächst einmal an, wie wir überhaupt mit Deskriptoren arbeiten können

und wie man diese umbiegen kann.

Dafür fangen wir erst einmal mit dem DUP-Systemaufruf an.

Was DUP macht, ist, dass es den Datei-Deskriptor, den es als einziges Argument bekommt, dupliziert.

Und der Rückgabewert ist ein zweiter Deskriptor, der auf dieselbe Datei zeigt.

Nun kann der neu erzeugte Deskriptor genauso verwendet werden wie der erste.

Das heißt, es kann darauf gelesen und geschrieben werden.

Der Zahlenwert, der den Deskriptor repräsentiert, wird dabei vom Betriebssystem gewählt.

Und im Vergleich dazu schauen wir uns nun den DUP-2-Aufruf an.

Denn mit DUP-2 können wir nun selbst bestimmen, welchen Wert der neue Deskriptor haben soll.

DUP-2 erwartet dementsprechend zwei Argumente.

Das erste Argument ist der Deskriptor, der dupliziert werden soll.

Und das zweite Argument ist ein Integer, dessen Zahlenwert als neuer Deskriptor genutzt werden soll.

Falls es sich bei dem zweiten Argument, hier dem New FD, um eine bereits geöffnete Datei handelt,

beziehungsweise um einen bereits gültigen Deskriptor, dann wird dieser erst geschlossen,

bevor die Nummer, die er innehat, wieder verwendet wird.

Damit können wir einen Datei-Deskriptor schaffen, der einen beliebigen Wert hat, den wir uns aussuchen können.

An der Stelle sollten wir im Hinterkopf behalten, dass die Standard-Eingabe immer der Deskriptor 0 ist

und die Standard-Ausgabe der Deskriptor 1 bzw. der Standard-Fehler-Ausgabe-Kanal der Deskriptor 2 ist.

Wenn wir nun also DUP-2 verwenden wollen, um den Standard-Ausgabe-Kanal umzuleiten,

dann müssen wir zunächst einmal einen Deskriptor schaffen, der auf etwas zeigt, wohin wir die Ausgabe umleiten möchten.

In diesem Beispiel verwenden wir einfach den Open-System-Aufruf auf die Datei slash def null

und dabei bestimmen wir, dass der Deskriptor schreiben soll.

Um nun die Standard-Ausgabe auf die Datei slash def null umzuleiten,

müssen wir erst einmal ermitteln, welchen Zahlenwert der Deskriptor für stdout hat.

Dies ist für gewöhnlich die 1.

Aber man kann auch mittels eines Makros, nämlich stdout, file.no darauf zugreifen.

Also rufen wir nun DUP-2 auf mit dem ersten Argument fd, welches der Deskriptor für slash def null ist

und das zweite Argument der Deskriptor für die Standard-Ausgabe.

Sobald dieser System-Aufruf erfolgreich war, zeigt nun die Standard-Ausgabe auf die Datei slash def null.

Wenn wir nun also die Standard-Ausgabe nutzen, z.B. indem wir ein Printf schreiben,

dann wird alles, was wir nun in Printf schreiben, in die Datei slash def null geschrieben.

An der Stelle ist ja noch angemerkt, dass es sich bei slash def null um eine spezielle Datei handelt,

denn sämtliche Ausgabe, die dahin geschieht, verpufft ins Nichts.

Wollen wir nun also die Ausgabe eines Programms, das wir starten wollen, in eine bestimmte Datei umleiten,

können wir dies tun.

Dies funktioniert, weil Datei-Deskriptoren sowohl bei Fork als auch beim Exec erhalten bleiben.

Und das Konzept von Datei-Deskriptoren und das Zusammenspiel mit Lese- und Schreiboperation auf Dateien

ein bisschen genauer zu illustrieren, haben wir hier ein kleines Beispiel vorbereitet.

In dem Beispiel soll gezeigt werden, wie wir auf der UserSpace Seite einmal den Datei-Deskriptor haben

und wie dies auf der Kernelseite verwendet wird.

In dem Beispiel haben wir eine UserSpace Anwendung, die einmal den Open-System-Aufruf auf der Datei

Datei.txt aufruft.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:14:13 Min

Aufnahmedatum

2020-12-01

Hochgeladen am

2020-12-01 16:29:37

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen