Was ist "standard-Eingabe"?
Ich wurde beauftragt mit der Erstellung eines test-Programms in C
liest den Inhalt der standard-Eingabe und druckt diese dann.
Aber ich habe ein wenig Zweifel: was ist genau standard-Eingabe?
Ist es, was ich in die Tastatur? Ist es eine Datei, die ich Lesen muss?
Beides?
Und das gleiche gilt für standard output
: ist es die Konsole? eine Datei?
- Dieser helfen könnte.
- Danke für den link. Aber
Unless redirected, input is expected from the keyboard which started the program
. Dassredirected
... es bedeutet, dass die Eingabe aus einer Datei? - In C standard-Eingabe ist
stdin
- und standard-Ausgabe iststdout
, beide definiert in<stdio.h>
; die Tatsache, dass Sie "keyboard" oder "Datei" ist irrelevant... - aber shoulend Sie nicht behandelt werden, anders? Wenn die Eingabe aus einer Datei, sollte es nicht zuerst geöffnet werden?
- mögliche Duplikate von verwirrt über stdin, stdout und stderr?
Du musst angemeldet sein, um einen Kommentar abzugeben.
C-standard (z.B. C99 oder C11) definiert, was sollte erwartet werden, von der standard -
<stdio.h>
header (nachdem Sie entsprechend#include
-d-es). Sehen stdio(3) man-Seite.Dann haben Sie die
stdin
undstdout
undstderr
Datei-handles (Zeiger auf einigeFILE
was ist ein abstrakter Datentyp).Die Tatsache, dass
stdin
ist verbunden mit einem Gerät (z.B. einem keyboard) ist Umsetzung spezifischer.Könnten Sie (aber das wäre unmoralisch und/oder ineffizient) implementieren Sie die C-standard mit z.B. ein Zimmer, das von menschlichen Sklaven (das ist unethisch, wenn Sie bezahlte Arbeiter das wäre ineffizient), anstatt mit einem computer. Oft, Computern gibt Ihr einige die Implementierung der C standard durch die Hilfe von einigen Betriebssystem.
Möchten Sie vielleicht wissen, in deinem C-Programm, wenn
stdin
ist eine "Tastatur" oder Weiterleitung von einigen "Datei". Leider ist, soweit ich weiß, gibt es keine C99-standard-Weg, um das zu wissen.Wie Sie erwähnen,
stdin
,stdout
undstderr
verfügbar sein sollten, in Ihr Programm beim Start (also nach der Eingabemain
....). Daher, es sei denn, Siefclose
diestdin
stream, Sie können es Lesen (mitgetchar
,scanf
,getline
,fgets
,fscanf
... und Freunden) ohne Vorherige Pflege (so dass Sie nicht brauchen, umfopen
es selbst).Auf Linux oder die meisten Posix-Systeme benutzen Sie vielleicht als eine Annäherung
isatty(STDIN_FILENO)
- siehe isatty(3) für mehr -, um zu testen, obstdin
"ist" die "Tastatur" (durch testen, wenn es einige tty). Siehe auch diese & dass.At program startup, three text streams are predefined and need not be opened explicitly
OK. So, ob es eine Datei oder ein Tastatur-Eingabe -, lese ich diestdin
sofort, ohne zu prüfen, ob es geöffnet, richtig?Ja, standard-Eingabe (stdin) Eingang exepected von der Tastatur. Ja, könnte sein, in form von user-input aus einem basic-Programm oder von einem Kommandozeilen-argument. Standard-Ausgabe (stdout) wird die Ausgabe des Codes, in der Regel in das terminal-Fenster. Sie konnte bei der Ausgabe des Codes fast überall, D. H. in eine Datei, zu einem Textfeld, browser, aber der standard ist stdout, die das terminal.
Hoffe, das hilft.
Normalerweise die Standardeingabe ist die Tastatur und die Standardausgabe der Bildschirm. Sie können jedoch leiten Sie diese in der Befehlszeile mit dem "<" und ">" - Symbole. Eine Befehlszeile wie
wird, ändern Sie die standard-Ausgabe für den Befehl dir, um die angegebene Datei. Also alle Ausgabe geht zu Datei. Die aufgerufene Anwendung oder der Befehl selbst muss normalerweise nicht einmal bemerken den Unterschied.
ls -R > Tree.txt
dir
in die Datei geschrieben wird?standard-Ausgabe (oder
stdout
) bezieht sich auf den standardisierten Ströme von Daten, erzeugt durch Kommandozeilen-Programme (D. H., alle-text-Modus-Programme) unter Linux und anderen Unix-ähnlichen Betriebssystemen.stdin ist der Datei-Deskriptor 0, kann man eine Datei nach stdin von:
ebenfalls für stdout (file-Deskriptor 1)
und stderr (fd 2)
wenn Sie ein Programm nimmt eine Datei, aber nicht handle stdin, können Sie verwenden Sie die oben genannten Formate durch, dies zu tun (vorausgesetzt,- f, wenn die input-Datei-argument)
myprog -f /dev/stdin