Standardströme

In der Computerprogrammierung werden Standardströme Eingang und Produktionskanäle zwischen einem Computerprogramm und seiner Umgebung vorverbunden (normalerweise ein Textterminal), wenn es Ausführung beginnt. Die drei Eingabe/Ausgabe-Verbindungen werden Standardeingang (stdin), Standardproduktion (stdout) und Standardfehler (stderr) genannt.

Hintergrund

Im am meisten Betriebssystemzurückdatieren Unix mussten Programme zum passenden Eingang und den Produktionsdaten ausführlich in Verbindung stehen. Auf vielen jener Systeme konnte das eine Einschüchternprogrammierherausforderung sein, die durch die OS-specific Kompliziertheit wie das Erreichen von Kontrollumgebungseinstellungen, das Zugreifen auf einen lokalen Dateitisch, die Bestimmung der beabsichtigten Datei und das Berühren des richtigen Falls eines Karte-Lesers, magnetischen Band-Laufwerkes, Laufwerks, Liniendruckers, Karte-Schlags oder interaktiven Terminals geschaffen ist.

Unix hat mehrere Groundbreaking-Fortschritte zur Verfügung gestellt, von denen einer abstrakte Geräte zur Verfügung stellen sollte: Es hat das Bedürfnis nach einem Programm entfernt, um zu wissen oder sich zu sorgen, mit welchen Geräten es kommunizierte. Ältere Betriebssysteme haben auf den Programmierer eine Rekordstruktur und, oft nichtorthogonale Datensemantik und Gerät-Kontrolle gezwungen. Unix hat diese Kompliziertheit mit dem Konzept eines Datenstroms beseitigt: Eine bestellte Folge von Datenbytes, die bis zum Ende der Datei gelesen werden können. Ein Programm kann auch Bytes, wie gewünscht, schreiben und brauchen nicht (und kann nicht leicht) erklären Sie, wie viel es geben wird, oder wie sie gruppiert werden.

Ein anderer Unix Durchbruch sollte Eingang und Produktion standardmäßig automatisch vereinigen — das Programm (und Programmierer) hat absolut nichts getan, um Eingang und Produktion für ein typisches Prozess-produktiondes Eingangs-Programm zu gründen (wenn es kein verschiedenes Paradigma gewählt hat). Im Gegensatz haben vorherige Betriebssysteme gewöhnlich verlangt, dass einige — häufig Komplex — Job-Betriebssprache Verbindungen hergestellt haben, oder die gleichwertige Last musste durch das Programm orchestriert werden.

Seitdem Unix Standardströme zur Verfügung gestellt hat, wurde der Unix C Laufzeitumgebung verpflichtet, ihn ebenso zu unterstützen. Infolgedessen stellen die meisten C Laufzeitumgebungen (und die Nachkommen von C), unabhängig vom Betriebssystem, gleichwertige Funktionalität zur Verfügung.

Standard hat (stdin) eingegeben

Standardeingang ist Daten (häufig Text) das Eintreten in ein Programm. Das Programm bittet um Datenübertragungen durch den Gebrauch der gelesenen Operation. Nicht alle Programme verlangen Eingang. Zum Beispiel führen der dir oder das ls Programm (der in einem Verzeichnis enthaltene Dateinamen zeigt) seine Operation ohne jeden Strom-Dateneingang durch.

Wenn nicht umadressiert, wird Eingang von der Tastatur erwartet, die das Programm angefangen hat.

Der Dateideskriptor für den Standardeingang ist 0 (Null); der POSIX

Standardproduktion (stdout)

Standardproduktion ist der Strom, wo ein Programm seine Produktionsdaten schreibt. Das Programm bittet um Datenübertragung mit der schreiben Operation. Nicht alle Programme erzeugen Produktion. Zum Beispiel benennt die Datei Befehl um (verschiedenartig hat mv genannt, bewegen Sie sich, ren) ist auf dem Erfolg still.

Wenn nicht umadressiert, ist Standardproduktion das Textterminal, das das Programm begonnen hat.

Der Dateideskriptor für die Standardproduktion ist 1 (ein); der POSIX

Standardfehler (stderr)

Standardfehler ist ein anderer Produktionsstrom, der normalerweise durch Programme an Produktionsfehlermeldungen oder Diagnostik verwendet ist. Es ist ein Strom, der der Standardproduktion unabhängig ist, und kann getrennt umadressiert werden. Der übliche Bestimmungsort ist das Textterminal, das das Programm angefangen hat, um die beste Chance zur Verfügung zu stellen, gesehen zu werden, selbst wenn Standardproduktion (so nicht sogleich beobachtet) umadressiert wird. Zum Beispiel wird die Produktion eines Programms in einer Rohrleitung zum Eingang des folgenden Programms umadressiert, aber Fehler aus jedem Programm gehen noch direkt zum Textterminal.

Es ist annehmbar — und — für die Standardproduktion und den Standardfehler normal, zu demselben Bestimmungsort wie das Textterminal geleitet zu werden. Nachrichten erscheinen in derselben Ordnung, wie das Programm ihnen schreibt, wenn Pufferung nicht beteiligt wird. (Zum Beispiel besteht eine allgemeine Situation darin, wenn der Standardfehler-Strom ungepuffert ist, aber der Standardproduktionsstrom wird liniengepuffert; in diesem Fall kann Text, der dem Standardfehler später geschrieben ist, auf dem Terminal früher erscheinen, wenn der Standardproduktionsstrom-Puffer noch nicht voll ist.)

Der Dateideskriptor für den Standardfehler ist 2; der POSIX

Die meisten Schalen erlauben sowohl Standardproduktion als auch Standardfehler, zu derselben Datei mit umadressiert zu werden

&> Dateiname

Mit dem Bach artige Schalen erlauben Standardfehler, zu demselben Bestimmungsort umadressiert zu werden, dass Standardproduktion zum Verwenden geleitet wird

2>&1

Zeitachse

Die 1950er Jahre: Fortran

Fortran hat die Entsprechung von Dateideskriptoren von Unix: für stdin, für stdout und für stderr.

! FORTRAN 77 Beispiel

PROGRAMM WICHTIGER

LESEN SIE (UNIT=5, *) ZAHL

SCHREIBEN SIE (UNIT=6,' (F5.3)')' IST ZAHL: ', ZAHL

ENDE

</Quelle>

1960: ALGOL 60

Algol 60 wurde dafür kritisiert, keinen Standarddateizugang zu haben.

1968: ALGOL 68

Algol-68-Eingang und Ausgabeeinrichtungen sind insgesamt den transput genannt geworden. Koster hat die Definition des transput Standards koordiniert. Das Modell hat drei Standardkanäle eingeschlossen: und.

Beispiel:

  1. Algol 68 Beispiel
#

wichtig: (

Reelle Zahl;

getf (stehen in, ($g$, Zahl));

printf ((ist $ "Zahl: "g (6,4) "ODER" $, Zahl)); # ODER

#

putf (treten hervor, (ist $" Zahl: "g (6,4)"!" $, Zahl));

newline (treten) (hervor)

) </pre>

Die 1970er Jahre: C und Unix

Auf der C Programmiersprache werden der Standardeingang, die Produktion und die Fehlerströme den vorhandenen Dateideskriptoren von Unix 0, 1 und 2 beziehungsweise beigefügt. In einer POSIX Umgebung

1995: Java

In Java wird auf die Standardströme durch (für stdin), (für stdout), und (für stderr) verwiesen.

öffentliche statische leere Hauptsache (Spannen args []), {\

versuchen Sie {\

BufferedReader br =

neuer BufferedReader (neuer InputStreamReader (System.in));

Spannen Sie s = br.readLine ;

doppelte Zahl = Double.parseDouble (s);

System.out.println ("Zahl ist:" + Zahl);

} Fang (Ausnahme e) {\

System.err.println ("Fehler:" + e.getMessage );

}\

}\

</Quelle>

Oder Sie können die Klasse des Pakets java.util verwenden.

öffentliche statische leere Hauptsache (Schnur [] args) {\

Scanner sc = neuer Scanner (System.in);

während (sc.hasNextLine ) {\

Schnur-Linie = sc.nextLine ;

doppelte Zahl = Double.parseDouble (Linie);

System.out.println ("Zahl ist:" + Zahl);

}\

}\</Quelle>

Die 2000er Jahre:.NET

In C# und andere.NET Sprachen wird auf die Standardströme durch (für stdin), (für stdout) und (für stderr) verwiesen. Grundlegend gelesen und schreiben Fähigkeiten für den stdin, und stdout Ströme sind auch direkt durch die Klasse zugänglich (z.B kann statt verwendet werden).

, und sind (stdin) und (stdout, stderr) Gegenstände, die nur Zugang zu den zu Grunde liegenden Standardströmen auf einer Textbasis erlauben. Der volle binäre Zugang zu den Standardströmen muss durch die Gegenstände durchgeführt werden, die durch, und beziehungsweise zurückgegeben sind.

//C# Beispiel

öffentliche statische int Hauptsache (Schnur [] args)

{\ versuchen Sie {\

spannen Sie s = System. Konsole. Darin. ReadLine ;

doppelte Zahl = doppelt. Syntaxanalyse (N);

System. Konsole. WriteLine ("Zahl ist: {0:F3}", Zahl);

kehren Sie 0 zurück;

//Wenn Syntaxanalyse eine Ausnahme geworfen

hat

} Fang (System. ArgumentNullException) {

System. Konsole. Fehler. WriteLine ("Keine Zahl wurde eingegangen!");

} Fang (System. FormatException) {\

System. Konsole. Fehler. WriteLine ("Der angegebene Wert ist nicht eine gültige Zahl!");

} Fang (System. OverflowException) {\

System. Konsole. Fehler. WriteLine ("Die bestimmte Anzahl ist zu groß!");

}\

kehren Sie-1 zurück;

}\</Quelle>

'.NET Grundlegendes Sehbeispiel

Öffentliche Funktion wichtig als ganze Zahl

Dunkle Zahl Als Doppelter

Verdunkeln Sie s Als Schnur

Versuchen Sie

s = System. Konsole. Darin. ReadLine

Zahl = CDbl (s)

System. Konsole. WriteLine ("Zahl ist: {0:F3}", Zahl)

Geben Sie 0 zurück

Fangen Sie e Als System. InvalidCastException

'wenn CDbl eine Ausnahme geworfen

hat

System. Konsole. Fehler. WriteLine ("Keine Zahl wurde eingegangen!")

Geben Sie 1 zurück

Endversuch

Endfunktion

</Quelle>Wenn

man die Klasse anwendet, kann man die Beispiel-Eigenschaften, und von dieser Klasse verwenden, um auf die Standardströme des Prozesses zuzugreifen.

GUIs

Grafische Benutzerschnittstellen (GUIs) machen selten von den Standardströmen Gebrauch. Folglich sind das Umadressieren von GUI Programmen oder das Konstruieren einer GUI Rohrleitung weder praktisch noch nützlich. Die nächste Analogie schneidet wahrscheinlich (oder kopiert) aus einer Anwendung und klebt in einen anderen auf. Da manuelle Benutzeroperationen erforderlich sind, ist das Bewegen der großen Anzahl von Teigen nicht besonders effizient. Eine bemerkenswerte Ausnahme ist der dwm Fensterbetriebsleiter mit Ziegeln zu decken, der Daten zeigt, die durch stdin auf einer Status-Bar geleitet sind.

Einige GUI Programme, in erster Linie auf Unix, schreiben noch Fehlersuchprogramm-Information dem Standardfehler. Andere können Dateien nehmen, um vom Standard darin zu funktionieren (zum Beispiel viele Mediaspieler von Unix tun so).

Populäre Windows-Programme, die ein getrenntes Konsolfenster zusätzlich zu ihren Fenstern GUI öffnen, sind die Emulatoren pSX und DOSBox.

GTK-Server kann stdin als Nachrichtenschnittstelle mit einem interpretierten Programm verwenden, um einen GUI zu begreifen.

Der Allgemeine Lispeln-Schnittstelle-Betriebsleiter Paradigma "präsentiert" GUI an einen verlängerten Produktionsstrom gesandte Elemente..

Iostream-Bibliotheksstandardströme, Tagung Nennend

Iostream-Bibliothek verwendet c Präfix statt std, um Standardströme zu nennen. Zusätzlich zu cin, cout und cerr, bietet es den Klotz-Standardstrom an, der cerr ähnlich ist, aber gepuffert ist.

Siehe auch

Links


Enzyklopädie Galactica / Laden
Impressum & Datenschutz