Was bedeutet „Stream“ in C?

Lesezeit: 4 Minuten

Jins Benutzeravatar
Jin

Ich lese gerade einen Abschnitt in ‘C Primer Plus’, der sich mit Dateien, Streams und Tastatureingaben befasst. Der Autor verbindet das Konzept von Stream mit Dateien und definiert Stream wie folgt:

Konzeptionell handelt das C-Programm mit einem Stream statt direkt mit einer Datei. Ein Stream ist ein idealisierter Datenfluss, auf den die tatsächliche Eingabe oder Ausgabe abgebildet wird. Das bedeutet, dass verschiedene Arten von Eingaben mit unterschiedlichen Eigenschaften durch Streams mit einheitlicheren Eigenschaften dargestellt werden. Der Vorgang des Öffnens einer Datei wird dann zum Zuordnen eines Streams zu der Datei, und das Lesen und Schreiben findet über den Stream statt

Was meint der Autor mit dem fettgedruckten Satz? Und was ist die Verbindung zwischen Dateien und Stream?

  • Suchen und lesen Sie über Dateistreams in C aus verschiedenen anderen Quellen im Internet, nämlich. tutorialspoint.com usw. Sie werden es verstehen.

    – 0xF1

    29. Juli 2016 um 7:31 Uhr


  • Sie haben die Antwort bereits fett markiert. Genau das ist es. Keine schlechte Frage, aber ich bezweifle, ob es hierher gehört

    – sjsam

    29. Juli 2016 um 7:31 Uhr


  • Vielleicht ist es Ihnen möglich vorstellen Es ist wie ein Rohr (eine Röhre, die Wasser transportiert) – eine Verbindung, durch die Daten ein- und ausfließen können.

    – abhishek_naik

    29. Juli 2016 um 7:32 Uhr


  • @BatCoder Was meinst du mit Pipe?

    – Jin

    29. Juli 2016 um 7:33 Uhr

  • @Don’tYouWorryChild tutorialspoint ist der letzte Ort, an dem Sie etwas über C oder alles, was mit Programmierung zu tun hat, lesen sollten.

    – qwr

    13. September 2022 um 5:46 Uhr

Benutzeravatar von MJ
MJ

Beachten Sie, dass Dateien und Streams ganz unterschiedliche Dinge sind. Dateien sind nur Folgen von Bytes, während Streams nur Vermittler (Helfer) sind.

Streams kommen ins Bild, da alle Programme in vielen verschiedenen Formen mit ihrer Umgebung interagieren müssen (könnten Dateien sein, E/A-Geräte wie Monitor und Tastatur, Netzwerksteckdosen usw.).

Damit Ein Stream ist eine Schnittstelle(ein einfaches „Gesicht“, um mit etwas zu arbeiten, das viele Feinheiten hat, die für uns irrelevant sind, genauso wie wir nicht wissen müssen, wie eine TV-Fernbedienung funktioniert!) zum Auslösen eines Eingabe-/Ausgabedatenflusses von/zu irgendetwas, das eine Quelle/ein Ziel für diese Eingabe-/Ausgabedaten sein kann, wobei die Implementierungsdetails auf niedriger Ebene verborgen werden der zahlreichen Methoden, die Betriebssysteme entwickeln, um mit der unterschiedlich gestalteten Hardware im Auftrag der Programmierer zu interagieren (d. h. wir als Programmierer sind nicht wirklich daran interessiert, die Art und Weise, wie ein Betriebssystem mit verschiedener Hardware interagiert, jedes Mal neu zu programmieren, wenn wir es tun neue Software erstellen).

Denken Sie zum Beispiel darüber nach, wie unser Programm Eingaben von der Tastatur erhalten kann … wie passiert das? Das geschieht durch einen versteckten (für den Programmierer verborgenen) Stream, den das Betriebssystem für jeden “Prozess” bereitstellt (Sobald ein Programm ausgeführt wird, ist es eine sogenannte Prozess), und das Betriebssystem gibt die Adresse an den für einen Prozess erstellten Standardstream weiter automatisch(dh wir müssen keinen Code schreiben, um seine Adresse zu finden). Dieser Stream wird allgemein als “stdin” (verwurzelt in der C- und Unix-Terminologie) oder formaler als “The Standard Input Stream” bezeichnet. Unsere Programme, egal in welcher Sprache geschrieben, müssen dazu in der Lage sein verwenden solche Standardströme, die vom Betriebssystem über die Standard-E/A-Bibliotheken dieser Sprache erstellt werden. Als ein Beispiel in der Programmiersprache Ckönnen wir den Standardeingabestrom scannen, indem wir die Funktion “Scanf“(scanf wird automatisch wissen, wo die stdin unseres Programms ist).

Aber ein weiteres wichtiges Beispiel, wieder in Cnehmen wir an, dieses Mal möchte unser Programm die Eingaben des Benutzers in eine “Datei” schreiben … Reicht in dieser Situation nur die Existenz des stdin-Streams? Natürlich nicht! Dieses Mal müssen wir verwenden ein Paar Ströme, eine bereits vom Betriebssystem bereitgestellte stdin, um die Eingaben des Benutzers zu erhalten, und eine zweite, um die Kommunikation zwischen unserem Programm und der Datei zu ermöglichen! Also werden wir müssen schaffen dieser zweite Stream! Etwas, das durch einen Anruf erledigt werden kann Die fopen() Funktion. (Fun Fact: Wenn Sie im Handbuch bemerken, werden Sie sehen, dass der zurückgegebene Typ dieser Funktion ein Zeiger auf eine Struktur namens FILE ist, aber das ist nur ein traditionelles „schlechte Wortwahl” für das, was eigentlich ein Zeiger auf einen „Stream“ ist! Ja, der Typ FILE in C ist tatsächlich ein Stream und keine Datei! (Ich verstehe, verrückt!) Denken Sie also daran, dass der Zeiger FILE* NICHT auf die eigentliche Datei zeigt, er zeigt auf einen Stream, der die Informationen über diese Datei enthält , einschließlich Informationen über den für die E/A der Datei verwendeten Puffer usw.)

Hinweis: Die von uns selbst erstellten Streams (z. B. Dateistreams) können bidirektionalwährend Standard-Streams sind unidirektional. Dies ist auch schön mit Pfeilen im Bild unten dargestellt:
Geben Sie hier die Bildbeschreibung ein

Ebenso wie ein Beispiel aus der C++-Welt zum VergleichSie wissen, dass die Dinge dort in Klassen und nicht in Strukturen sind, also werden Sie auf eine stoßen Objekt genannt “cout” (die Ausgabe Stream-Objekt), wenn Sie ausgeben, was ein Objekt ist, das mit dem Ausgabestrom verbunden ist (stdout in C), und eine Instanz der Klasse ostream ist (aus der Klassenhierarchie ios_base <--ios <--ostream). Um mit cout in den Standardausgabestrom zu schreiben, muss die Methode "<<" (entsprechend printf() in C) verwendet werden. Auch dieses Mal reicht cout nicht aus, um mit anderen Dingen (z. B. Dateien) zu interagieren, und wir müssen unsere eigenen Streams erstellen. In C++ kann dies durch Instanziieren der ifstream- und ofstream-Klassen (entsprechend der FILE-Struktur in C) erfolgen, was zu Objekten führt, die im Grunde die gleiche Rolle spielen wie der Zeiger “FILE*” in C.

Ich hoffe, das hilft.


Illustrationskredit an linuxhint.com

  • @MS du erwähnt hast input from keyboard, how does that happen? mit ausdrücklich stdout . warum ist aus? Sie nehmen Eingang. sollte es nicht sein stdin ?

    – Jin Lim

    1. November 2020 um 22:04 Uhr

  • @JinLim Sicher, das war ein Fehler, danke, dass du es erwähnt hast, ich habe es jetzt in einer Bearbeitung behoben.

    – MJ

    20. Februar 2021 um 0:51 Uhr


Die Leute, die C entworfen haben, wollten einen einheitlichen Weg, um mit verschiedenen Quellen sequentieller Daten wie Dateien, Sockets, Tastaturen, USB-Anschlüssen, Druckern oder was auch immer zu kommunizieren.

Also entwarfen sie eine Schnittstelle, die auf alle angewendet werden konnte. Diese Schnittstelle verwendet Eigenschaften, die allen gemeinsam sind.

Um es einfacher zu machen, über die Dinge zu sprechen, die über die Schnittstelle verwendet werden könnten, gaben sie den Dingen einen generischen Namen, Ströme.

Das Schöne an der Verwendung derselben Schnittstelle ist, dass derselbe Code zum Lesen aus einer Datei wie von der Tastatur oder einem Socket verwendet werden kann.

  • Ist ein Stream im Wesentlichen eine Datei selbst? (nur aus Neugier)

    – aderchox

    21. Oktober 2018 um 20:00 Uhr

  • Was IST eine Datei? Eine Datei ist eine Abstraktion. Es ist eine Adresse irgendwo im Speicher, die das erste Byte in einer Reihe von Bytes angibt (sie kann auch fragmentiert sein, wenn es sich um eine große Datei handelt). Ein Stream ist auch ein Speicherort, wo Bytes geschrieben und Bytes gelesen werden. In diesem Sinne ist es wie eine Datei, in der Sie schreiben und lesen können. Aber beides sind Abstraktionen. Sie sind einfach Speicher-Offsets, wo man Daten lesen und schreiben kann

    – Daniel

    17. Februar 2021 um 0:48 Uhr


  • Ist Stream ein Konzept auf Betriebssystemebene oder auf C-Sprachebene?

    – xusisme

    27. Dezember 2022 um 6:19 Uhr

Benutzeravatar von Daniel Kaas
Daniel Kas

EIN Strom ist eine logische Entität, die a darstellt Datei oder Gerätdas kann akzeptieren Eingang oder Ausgang. Alle Eingabe- und Ausgabefunktionen in Standard-C arbeiten mit Datenströmen. Streams können unterteilt werden TextStröme und binär Ströme.

Ein Stream ist einfach eine DATEI * Wie die Funktion C DATEI * fopen ( const char * filename, const char * mode ) Diese Funktion gibt eine Datei zurück *

DATEI:

Objekt, das Informationen zur Steuerung eines Streams enthält Objekttyp, der einen Stream identifiziert und die Informationen enthält, die zu seiner Steuerung benötigt werden, einschließlich eines Zeigers auf seinen Puffer, seinen Positionsindikator und alle seine Zustandsindikatoren.

Ein Strom ist die C way Umgang mit unterschiedlichen Datenträgern/Quellen. Dazu können sagen

  1. Eine Datei
  2. Eine Steckdose

usw. EIN streamals Schnittstelle, hilft Ihnen, die Datenverwaltung unter der Haube zu vergessen und sich auf die gewünschten Ziele zu konzentrieren.

Kais Benutzeravatar
Kai

Mein C-Programmiergrad verwendet dies als Erklärung, wenn es hilft: “Ein Stream ist eine Abstraktion einer Datei, die dem Programmierer eine konsistente Schnittstelle bietet, unabhängig vom tatsächlichen Gerät.”

1437550cookie-checkWas bedeutet „Stream“ in C?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy