[Powered by Google Translate] TOMMY: In diesem Video werden wir kennen lernen
Umleitung und Rohre.
Bisher haben wir schon mit Funktionen wie printf
Ausgabedaten an das Endgerät und Funktionen wie GetString
um dem Benutzer die Eingabe in unseren bereitzustellen
Programm mit der Tastatur.
Lassen Sie uns schnell einen Blick auf ein Programm, das eine Reihe von erhält
Eingabe von dem Benutzer und gibt es dann.
>> In Zeile 7, wir den Benutzer zur Eingabe einer Zeichenfolge, und
dann on line 8, wir drucken es wieder heraus.
Lassen Sie kompilieren und ausführen unserem Programm.
Great.
Der String wir bereitgestellt wird zurückgesendet
uns auf dem Terminal.
Dies geschah, weil die Funktion printf schrieb ein
Datenstrom genannt Standard aus, oder s-t-d-out.
Wenn etwas auf die Standardausgabe geschrieben wird, ist es standardmäßig
angezeigt durch das Endgerät.
>> Also das ist alles schön und gut, aber was, wenn, statt einfach
Anzeige der Saite, wollten wir es in einer Datei speichern?
Zum Beispiel könnten wir erinnern wollen, was unsere
Programm hat, wenn wir es gab eine bestimmte Eingabe später.
Ein Ansatz wäre, diese in unser C-Programm zu tun, mit
einige spezielle Funktionen zum Schreiben von Dateien, dass wir
sehen in einem anderen Video.
Noch einfacher, aber wäre irgendwie
redirect stdout in eine Datei.
So, wenn printf schreibt stdout, wird der Inhalt
in einer Datei anstatt geschrieben werden
angezeigt durch das Endgerät.
Wir können nur so, dass durch Zugabe eines Größer-als-Zeichen zu tun, gefolgt
von einem Dateinamen, der Befehl, den wir verwenden, um unser Programm auszuführen.
>> So, anstatt einfach ausführen. / Redirect, können wir
laufen. / umzuleiten, gefolgt von einem Größer-Zeichen, gefolgt von
Dateinamen, wie file.txt.
Mal sehen, was passiert.
OK.
Beachten Sie, dass dieses Mal nichts am Terminal angezeigt wurde,
aber wir haben nicht die Inhalte unserer modifiziert
C-Programm überhaupt.
Lassen Sie uns nun untersuchen die Inhalte dieses Verzeichnisses mit ls.
>> Gut.
Wir haben jetzt eine neue Datei in unserem Verzeichnis namens file.txt,
das ist der Name der Datei lieferten wir, wenn wir unsere rannte
Redirect-Programm.
Lasst uns eröffnen file.txt.
Und hier können wir sehen, dass die stdout aus umzuleiten war
geschrieben, um die Datei mit dem Namen file.txt.
Also lasst uns laufen den vorherigen Befehl wieder, aber Zuführen eines
anderen Eingang dieser Zeit.
Okay.
Werfen wir einen Blick auf file.txt jetzt.
>> Wir können hier sehen, dass die Datei überschrieben wurde, so dass unsere
Original-Eingang ist nicht mehr da.
Wenn wir stattdessen wollen diese Datei anzuhängen, Inbetriebnahme der neuen
Eingang unter den vorhandenen Inhalt der Datei, können wir
mit zwei Größer-als-Zeichen anstelle von nur einem.
Lasst uns versuchen.
Nun, wenn wir file.txt wieder zu öffnen, können wir sehen, unsere beiden
Eingangsleitungen.
In einigen Fällen möchten wir vielleicht zu einem entsorgen
Ausgabe unseres Programms.
Vielmehr als das Schreiben der Ausgabe in eine Datei und dann löschen
die Datei, wenn wir damit fertig sind, können wir eine besondere schreiben
Datei mit dem Namen / dev / null.
Wenn etwas an / geschrieben dev/null--
oder kurz devnull -
es wird automatisch verworfen.
So der devnull denken, wie ein schwarzes Loch für Ihre Daten.
>> So, jetzt haben wir gesehen, wie die Größer-Zeichen umleiten
stdout, lasst uns sehen, wie wir das Umleiten der Standardeingabe in -
oder s-t-d-in -
das Analogon von stdout.
Während Funktionen wie printf in den Stream genannt schreiben
stdout, GetString und ähnliche Funktionen aus dem Stream gelesen
als stdin, die standardmäßig ist der Strom der
Zeichen an der Tastatur eingegeben.
Wir können stdin mit dem weniger als Zeichen umzuleiten, gefolgt
von einem Dateinamen.
Nun anstatt Aufforderung des Benutzers zur Eingabe an die
Anschluss wird ein Programm öffnen Sie die Datei, die wir angegeben und verwenden
seine Linien als Eingabe.
>> Mal sehen, was passiert.
Great.
Die erste Zeile hat file.txt zum Endgerät gedruckt
weil wir fordern GetString einmal.
Wenn wir einen weiteren Anruf musste GetString in unserem Programm, die
nächste Zeile file.txt würde als benutzt worden
Ein auf diesen Ruf.
Auch hier haben wir nicht unser C-Programm modifiziert überhaupt.
Wir sind nur verändern, wie wir es laufen.
Und auch daran erinnern, haben wir nicht weitergeleitet stdout dieses Mal,
so dass die Ausgabe des Programms noch
erscheint am Terminal.
Wir können natürlich umzuleiten sowohl stdin
und stdout wie diese.
Nun enthält file2.txt die erste Zeile des file.txt.
>> Also, mit dieser Operatoren, waren wir in der Lage zu lesen und
Schreiben von Textdateien.
Jetzt wollen wir sehen, wie wir die Ausgabe eines Programms verwenden
der Eingang zu einem anderen Programm.
Also hier ist ein weiteres einfaches C-Programm I
hier hello.c genannt.
Wie Sie sehen können, ist dies gibt einfach "Hallo
da! "an den Benutzer.
Wenn ich will redirect als Eingabe verwenden Sie die Ausgabe von hallo -
ein anderes Programm -
Ich konnte erste umleiten stdout hallo zu einer Datei namens
input.txt, dann leiten Sie den stdin umleiten selben
Datei - input.txt.
So ich tun kann. / Hallo> input.txt.
Drücken Sie die Eingabetaste, um diese auszuführen.
Gefolgt von. / Redirect <
input.txt und auszuführen, dass.
So können wir verkürzen diese ein wenig mit einem Semikolon, das ermöglicht
uns, zwei oder mehrere Befehle auf der gleichen Linie verlaufen.
So kann ich sagen,. / Hallo> input.txt, Semikolon,
. / Redirect <input.txt.
>> So funktioniert das, aber es fühlt sich ziemlich unelegant.
Ich meine, brauchen wir wirklich diese Vermittler Textdatei, ist
nicht mehr notwendig, nachdem Umleitung läuft?
Glücklicherweise können wir es vermeiden, diese zusätzliche Text-Datei mit, was
als ein Rohr.
Wenn ich sage, / hallo |.. / Redirect, dann die stdout
das Programm auf der linken Seite -
in diesem Fall, hallo -
wird als Standard-Eingang für die verwendet werden
Programm auf der rechten Seite.
In diesem Fall umzuleiten. Also lasst uns laufen diese.
>> Dort gehen wir.
Wir sehen, dass der Ausgang des Hallo wurde verwendet als Input
für umzuleiten.
Durch Bespannen Befehle zusammen mit Rohren bilden wir, was
als eine Pipeline, da unsere Leistung im Wesentlichen bewegt
durch eine Folge von Befehlen.
Mit Pfeifen, können wir ein paar coole Sachen ohne zu tun
Code schreiben, überhaupt.
Zum Beispiel, sagen wir mal wir wollen wissen, wie viele Dateien
Innere dieses Verzeichnis.
Mit einem Rohr, können wir den Befehl ls mit dem WC zu verbinden -
oder wordcount -
Befehl.
Ls wird jede Datei in dem Verzeichnis stdout auszugeben und
wc wird uns sagen, wie viele Zeilen wurden sie über stdin angegeben.
Also, wenn wir sagen, ls | wc-l -
Versorgung der Option-l zum WC, sie zu erzählen, um Linien zu zählen -
können wir genau sehen, wie viele Dateien
im aktuellen Verzeichnis.
>> Werfen wir also einen Blick auf ein weiteres Beispiel.
Ich habe hier eine Datei namens students.txt,
mit einer Liste von Namen.
Allerdings sind diese Namen nicht in beliebiger Reihenfolge sie alle, und es sieht
wie ein paar Namen wiederholt werden.
Was wir wollen, ist eine Liste von eindeutigen Namen in alphabetischer
Reihenfolge gespeichert in einer Datei namens final.txt.
Wir könnten natürlich, schreiben Sie ein C-Programm, dies für uns zu tun.
Aber es wird nicht unnötig zu
komplexe ziemlich schnell.
Lasst uns stattdessen Rohre und einige built-in-Werkzeugen zu lösen
Dieses Problem.
>> Das erste, was wir tun müssen, ist die Datei lesen students.txt.
Die Katze Befehl wird genau das tun.
Es wird in der angegebenen Datei zu lesen und zu schreiben
dessen Inhalt auf die Standardausgabe.
Nachdem wir die Textdatei gelesen haben, werden wir
möchten die Namen zu sortieren.
Der Befehl sort kann dies für uns erledigen.
Sortieren wird ausgeben die Zeile über stdin an stdout versorgt
in sortierter Reihenfolge.
Zur Versorgung der Inhalt students.txt um
sort stdin, könnten wir eine Pfeife zu Katze und sortieren zu kombinieren.
So kann ich ausführen cat students.txt | sort-und
drücken Sie die Eingabetaste.
Und nun sehen wir den Inhalt der students.txt in
alphabetischer Reihenfolge.
>> So fügen wir einen weiteren Befehl -
uniq oder einzigartig -
unsere Pipeline.
Wie Sie sich vorstellen können, uniq, wenn lieferte eine sortierte Sequenz von
Linien über stdin, wird der Ausgang die einzigartigen Linien.
Deshalb haben wir jetzt cat students.txt
| Sort | uniq.
Schließlich kann man den Ausgang der Pipeline zu Schuß
Datei über cat students.txt | sort | uniq
> Final.txt.
Also, wenn wir final.txt öffnen, haben wir genau das, was wir waren
Suche nach:
eine Liste der eindeutigen Namen in alphabetischer Reihenfolge,
gespeichert in einer Textdatei.
By the way, konnten wir auch gesagt haben sort <
students.txt | uniq> final.txt genau das zu tun
dasselbe, mit jedem der Operatoren wir gesehen haben
Dieses Video.
>> Mein Name ist Tommy, und dies ist CS50.