Hallo und willkommen zurück.
Wir befinden uns in einem neuen Abschnitt.
In diesem Abschnitt geht es um die Eingabe und Ausgabe von Dateien, das Schreiben und Lesen von Dateien.
Wir werden uns auf Textdateien konzentrieren, aber wir werden auch ein wenig über Binärdateien sprechen.
In dieser Vorlesung möchte ich nur einen Überblick geben, Ihnen erklären, was eine Datei ist und wie sie für die Speicherung
persistenter Daten verwendet werden kann.
Bis zu diesem Punkt greift unser Programm also auf alle Daten über den Speicher zu.
Wir sind mit dem Konzept der Variablen, der Strukturen, was auch immer es ist, vertraut.
Löschen Sie alle Daten, die Ihr Programm verwendet, aus dem Speicher.
Der Grund für die Speicherung im Speicher ist, dass dieser sehr schnell ist und man schnell darauf zugreifen
kann, um Berechnungen durchzuführen.
Sie führen den Abruf- und Ausführungszyklus und all diese Dinge durch.
Der Anwendungsbereich ist also begrenzt, aber auch die Vielfalt unserer Anwendungen, wenn sie
nur den Speicher nutzen, wird etwas eingeschränkt sein.
Wir wissen, dass das Gedächtnis verschwindet, wenn das Programm verschwindet, und das kann sehr einschränkend sein.
Alle ernsthaften Geschäftsanwendungen benötigen mehr Daten, als in den Hauptspeicher passen würden.
Der Arbeitsspeicher ist auch sehr klein, ganz oben.
Und heutzutage kann man eine Menge Speicher bekommen, 1630 bis 32 Gigabyte.
In der Vergangenheit und insbesondere bei eingebetteten Geräten stand jedoch nicht so viel Arbeitsspeicher zur Verfügung, so dass die Anwendungen
aufgrund des Platzes und der Größe sehr begrenzt waren.
Sie sollten wirklich nur Variablen und ähnliche Dinge im Hauptspeicher speichern.
Das liegt auch daran, dass der Hauptspeicher verschwindet, wenn das Programm verschwindet.
Sie können keine Daten speichern, die über einen Neustart hinaus bestehen bleiben.
Es hängt also alles von der Fähigkeit ab, Daten zu verarbeiten, die beständig sind und auf einem externen Gerät wie einer Festplatte
gespeichert werden, diese großen Programme.
Sie wollen also die Möglichkeit haben, auf der Festplatte zu speichern.
Er ist zwar etwas langsamer, aber man kann dort eine Menge Daten speichern, und große Programme müssen eine Menge
Daten speichern.
C bietet in der Header-Datei standardmäßig viele Funktionen zum Schreiben auf und Lesen von externen Geräten.
Sie müssen keinen eigenen Code schreiben, um die Dateien zu lesen und zu schreiben, aber Sie können den Vorteil
erkennen, den Anwendungen bieten, die Daten über einen längeren Zeitraum speichern können.
Eine Menge Vorteile.
Das externe Gerät, das Sie zum Speichern und Abrufen von Daten verwenden, ist in der Regel die Festplatte,
das Laufwerk.
Die Funktionen der Header-Datei, über die wir sprechen werden, können Sie jedoch auf jedem externen Speichergerät verwenden.
Sie können es also auf einem USB-Laufwerk verwenden, auf jedem externen Gerät, das Daten speichert, und auf einem SSD-Laufwerk
mit all den Beispielen.
Bislang gehen alle Daten, die der Benutzer eingibt, verloren.
Ist das Programm beendet, spricht man von flüchtigem Speicher.
Wenn Sie den Begriff Zeitspeicher hören, bedeutet dies, dass der Speicher nicht beständig ist oder die Daten nicht
beständig sind.
Sie verschwindet, wenn das Programm beendet wird oder wenn der Rechner neu gestartet wird.
Wenn der Benutzer das Programm also mit denselben Daten ausführen möchte, muss er sie jedes Mal neu eingeben, damit sie wiederhergestellt
werden.
Das ist sehr unangenehm.
Sie schränkt die Programmierung ein.
Und auch hier handelt es sich um flüchtigen Speicher.
Wenn Sie Daten in Dateien speichern und diese auf der Festplatte ablegen, handelt es sich um eine dauerhafte Speicherung.
Es ist immer noch da.
Auch wenn Sie den Rechner neu gestartet haben oder Ihr Programm nicht läuft.
Das wird als nichtflüchtiger Speicher bezeichnet, weil er um eine Datei herum bleibt, nichtflüchtige Daten speichern kann und normalerweise auf der Festplatte
oder heutzutage auf einem Solid-State-Laufwerk und SSD gespeichert ist.
Es handelt sich um einen benannten Bereich des Speichers, und der Bolzenstandard IO ist eine Datei, die die Verwendung von Informationen enthält,
um in diesen Dateien lesen und schreiben zu können.
Aber wir werden dieses Konzept des Schreibens und Lesens von Daten aus einer Datei für die permanente
Speicherung verwenden, und Sie werden feststellen, wie Ihre Anwendungen viel nützlicher, viel robuster und viel skalierbarer
werden, weil wir jetzt die Möglichkeit haben, große Datenmengen zu speichern, und wir müssen uns auch keine Sorgen machen, dass die
Daten verschwinden, wenn das Programm endet oder der Computer neu startet.
Es wird also sehr, sehr vorteilhaft sein, Dateien zu verwenden.
Eine Datei in einem Linux- oder Windows-Betriebssystem wird auf eine bestimmte Weise gespeichert.
Aber was die Programmiersprache C betrifft, so handelt es sich nur um eine Folge von Bytes, wobei jedes Byte einzeln
gelesen werden kann.
Dies entspricht der Dateistruktur unter Unix, muss es aber nicht.
Es macht nur dann einen Unterschied, wenn Sie Textdateien und Fenster lesen, weil Sie möglicherweise
zusätzliche Zeichen haben, über deren Größe Sie sich Gedanken machen müssen, aber es ist nur eine Folge von Bytes.
Wenn Sie also eine Textdatei haben, die mehr Bytes hat, können Sie diese Bytes trotzdem lesen.
Man muss nur verstehen, wofür diese Bytes stehen.
So sieht also eine Datei aus und wie wir sie mit der Programmiersprache C lesen und beschreiben
werden.
Es handelt sich lediglich um eine Reihe von Bytes mit verschiedenen Offsets.
Der Anfang der Datei würde bei Null liegen, und dann kann man immer verschiedene Positionen in der
Datei finden.
Es könnten vier sein, es könnten vier mal zehn zwei sein, es könnten 100 Bytes drin sein.
Und dann gibt es noch das Ende der Datei und das Ende der Datei, das normalerweise mit einer speziellen Markierung namens EOF und einer Datei
gekennzeichnet ist.
Eine Datei hat also einen Anfang und ein Ende und eine aktuelle Position.
Die aktuelle Position wird so viele Bytes am Anfang definiert.
Die aktuelle Position ist der Ort, an dem jede Aktion in der Datei stattfinden wird.
Sie werden an dieser Stelle schreiben oder lesen.
Und wir werden auch über einige Funktionen sprechen, mit denen Sie die aktuelle Position in einer Datei an eine beliebige Stelle
verschieben können.
Auch am Ende, wenn Sie am Ende oder bis zum Ende lesen wollen.
Es gibt zwei Arten von Dateien.
Es gibt Textdateien und Binärdateien.
Eine Textdatei besteht aus einer Folge von Zeichen, die als Zeilen organisiert sind.
Jede Zeile endet mit einer neuen Zeile, und die Textdaten können von System zu System unterschiedlich sein, je nachdem, wie die Zeichen
interpretiert werden.
So hat zum Beispiel unter Windows in DOS jede Zeile einen Wagenrücklauf und einen Zeilenvorschub, also einen Backslash R und
einen Backslash N.
Wenn Sie also die Daten lesen oder schreiben, müssen Sie das verstehen, weil das Format ein wenig
anders ist.
Aber unter Linux gibt es keinen Backslash.
R Man muss also verstehen, wie die Textdaten geschrieben werden, auch wenn sie nach Zeilen organisiert sind und aus einer Reihe von Bytes
bestehen, während binäre Daten als eine Reihe von Bytes geschrieben werden, genau wie sie im Speicher erscheinen.
Beispiele für Dateien, die binäre Daten enthalten, sind also Daten.
Unsere Dateien wie Bilddaten oder musikkodierende Binärdateien sind nicht lesbar.
Wir werden uns in diesem Abschnitt auf Textdateien konzentrieren, aber Sie können
alle Daten in eine Datei schreiben, die Sie möchten.
Sie können es als eine Reihe von Bytes schreiben und wie sie im Speicher erscheinen, oder Sie können es als Text schreiben.
Sobald die Datei jedoch tatsächlich geschrieben wurde, besteht sie nur noch aus einer Reihe von Bytes, auch
wenn sie als Text dargestellt wird.
Sie können Textdateien in einem Editor anzeigen, was die Lesbarkeit verbessert.
Sie müssen das Format der Datei verstehen, um sie lesen zu können, und das ist es, was
ich erwähnt habe, wenn Sie unter DOS, Windows oder Linux arbeiten, wo Windows zusätzliche Zeichen haben kann, wenn es Daten schreibt.
Eine Folge von 12 Bytes in einer Binärdatei könnte also 12 Zeichen, 12 Ganzzahlen mit acht mal acht Bit und
Vorzeichen oder 12 Ganzzahlen ohne Vorzeichen sein.
Binäre Brände sind besonders knifflig, weil sie nur Watson als den offensichtlichen Speicher speichern.
Im Binärmodus ist also jedes einzelne Bit der Datei zugänglich.
Aber um etwas aus einer Datei zu lesen, muss man verstehen, was für Daten darin enthalten sind und wie sie gespeichert
sind.
Und es kann davon abhängen, auf welchem System Sie arbeiten.
Und es hängt auch davon ab, ob es sich um Text oder Binärdaten handelt.
Ströme.
C-Programme werden automatisch auf drei Dateien in Ihrem Namen geöffnet.
Ein Stream kann eine Datei darstellen, aber ein Stream ist ein allgemeinerer Begriff, der jede Art von Eingabe darstellen kann.
Es könnte also die Tastatur, die Konsole, eine Datei oder ein Socket
darstellen.
Wenn Sie mit Netzwerken vertraut sind, sind Streams ein allgemeinerer Begriff, und es gibt drei Streams, die in der Programmiersprache
C automatisch für Sie geöffnet werden.
Die eine ist die Standardeingabe, und das ist das normale Eingabegerät Ihres Systems.
Normalerweise ist es standardmäßig die Tastatur.
Wir haben die Standardeingabe benutzt, wenn wir scan F machen, aber man könnte auch scan off benutzen, um aus Dateien
zu lesen.
Wenn Sie den Eingabestrom ändern, ändern Sie vielleicht den Eingabestrom in eine Datei, die Standardausgabe, die normalerweise
auf dem Bildschirm angezeigt wird, normalerweise über die Konsole.
Der Standardfehler wird auch auf dem Bildschirm angezeigt, aber man muss ihn normalerweise umleiten, um
ihn zu sehen, z. B. mit dem kaufmännischen Und-Zeichen.
Aber das sind die drei von mir erwähnten Outputs.
Die Standardeingabe ist die Datei, die von guitar und scan F gelesen wird. Die Standardausgabe wird von output us und print F verwendet,
wir haben hauptsächlich printf benutzt.
Sie können auch Dateien auf dem System umleiten, damit sie als Standardeingabe erkannt werden.
Dies ist eine Umleitung.
Dabei handelt es sich um ein Betriebssystemkonzept, bei dem Sie Daten umleiten können, indem Sie z. B. die Ausgabe an eine Datei senden
oder die Eingabe aus einer Datei abrufen, im Gegensatz zum Standard.
Hier können Sie die Symbole kleiner als oder größer als verwenden.
Der Zweck der Standard-Fehlerausgabe besteht darin, einen logisch eindeutigen Ort für Fehlermeldungen zu schaffen.
Es handelt sich also um ein separates Element, auch wenn es auf dem Bildschirm angezeigt wird.
Um darauf zugreifen zu können, müssen Sie einen speziellen Befehl haben.
Der Stream ist eine abstrakte Darstellung einer externen Quelle oder eines externen Ziels für Daten.
Aus diesem Grund ist sie allgemeiner als beispielsweise eine Datei.
Die Tastatur.
Die Befehlszeile Ihrer Anzeigedateien auf einem Datenträger.
Das sind alles Beispiele dafür, wie Sie mit Strömen arbeiten.
Streams werden viel wichtiger, wenn Sie anfangen, C++ zu studieren.
Die C-Bibliothek bietet Funktionen zum Lesen und Schreiben von und in Datenströme, so dass Sie dieselben Eingabe-Ausgabe-Funktionen
zum Lesen und Schreiben jedes externen Geräts verwenden können, das einem Stream zugeordnet ist.
Deshalb habe ich erwähnt, dass Sie Scan F verwenden können, um von der Tastatur zu lesen.
Sie können auch Scan F verwenden, um aus Dateien zu lesen.
Es hängt alles davon ab, was die Eingabe ist, wohin der Stream zeigt.
Die Funktionen sind also sehr, sehr nützlich und sehr, sehr flexibel, um dies zu tun.
Dies ist also nur ein grober Überblick darüber, was eine Datei ist und warum wir sie verwenden, wie sie persistente Daten
sind, sie sind nichtflüchtiger Speicher.
Sie bleibt bestehen, wir werden sie verwenden und wir werden die Standard-IO-Header-Datei verwenden,
um sie zu lesen und zu beschreiben, wenn wir Daten für unser Programm speichern müssen, und unsere Programme werden dadurch
viel robuster, viel benutzbarer und viel flexibler.
In unserer nächsten Vorlesung werden wir also über die tatsächliche Implementierung dieser Funktionen im Standard-IO-Header
sprechen.
Ich danke Ihnen.