Wat betekent het om naar stdout te schrijven in C?

Schrijft een programma dat naar “stdout” schrijft naar een bestand? het scherm? Ik begrijp niet wat het betekent om naar stdout te schrijven.


Antwoord 1, autoriteit 100%

Dat betekent dat u uitvoer afdrukt op het hoofduitvoerapparaat voor de sessie… wat dat ook mag zijn. De console van de gebruiker, een tty-sessie, een bestand of wie weet wat. Wat dat apparaat kan zijn, hangt af van hoe het programma wordt uitgevoerd en van waaruit.

Het volgende commando schrijft naar het standaard uitvoerapparaat (stdout)…

printf( "hello world\n" );

Wat in wezen gewoon een andere manier is om dit te doen…

fprintf( stdout, "hello world\n" );

In dat geval is stdout een verwijzing naar een FILE-stream die het standaarduitvoerapparaat voor de toepassing vertegenwoordigt. Je zou ook kunnen gebruiken

fprintf( stderr, "that didn't go well\n" );

in dat geval zou u de uitvoer naar het standaardfoutuitvoerapparaat voor de toepassing sturen, wat wel of niet hetzelfde kan zijn als stdout — zoals bij stdout, stderr is een verwijzing naar een FILE-stream die het standaarduitvoerapparaat voor foutmeldingen vertegenwoordigt.


Antwoord 2, autoriteit 30%

Het hangt ervan af.

Als u zich ertoe verbindt uitvoer naar stdout te sturen, laat u het in feite aan de gebruiker over om te beslissen waar die uitvoer naartoe moet.

Als u printf(...) gebruikt (of het equivalent fprintf(stdout, ...)), stuurt u de uitvoer naar stdout, maar waar dat uiteindelijk terecht komt, hangt af van hoe ik je programma aanroep.

Als ik uw programma op deze manier vanaf mijn console start, zie ik uitvoer op mijn console:

$ prog
Hello, World! # <-- output is here on my console

Ik zou het programma echter zo kunnen starten, zonder uitvoer op de console:

$ prog > hello.txt

maar ik zou nu een bestand “hello.txt” hebben met de tekst “Hello, World!” binnen, dankzij de omleidingsfunctie van de shell.

Wie weet Ik zou zelfs een ander apparaat kunnen aansluiten en de uitvoer zou daarheen kunnen gaan. Het punt is dat wanneer u besluit om af te drukken naar stdout (bijvoorbeeld door printf() te gebruiken), u niet precies weet waar het naartoe gaat totdat u ziet hoe de proces wordt gestart of gebruikt.


Antwoord 3, autoriteit 6%

stdout is de standaard uitvoerbestandsstroom. Het is duidelijk dat de eerste en standaardaanwijzer naar de uitvoer het scherm is, maar je kunt het naar wens naar een bestand verwijzen!

Lees a.u.b.:

http://www.cplusplus.com/reference/cstdio/stdout/

C++ lijkt echter erg op C, maar objectgeoriënteerd.


Antwoord 4, autoriteit 5%

stdout is de standaard uitvoerstroom in UNIX. Zie http://www.gnu.org/ software/libc/manual/html_node/Standard-Streams.html#Standard-Streams.
Wanneer u in een terminal werkt, ziet u gegevens die zijn geschreven naar stdout in de terminal en kunt u deze naar wens omleiden.


Antwoord 5, autoriteit 5%

stdout staat voor standaard uitvoerstroom en het is een stroom die door het besturingssysteem zelf beschikbaar is voor uw programma. Het is al vanaf het begin beschikbaar voor uw programma, samen met stdin en stderr.

Waar ze naar verwijzen (of van) kan van alles zijn, eigenlijk biedt de stream je programma alleen een object dat kan worden gebruikt als een interface om gegevens te verzenden of op te halen. Standaard is dit meestal de terminal, maar deze kan worden omgeleid waar u maar wilt: een bestand, naar een pijp die naar een ander proces gaat, enzovoort.


Antwoord 6, autoriteit 3%

@K Scott Piel schreef een geweldig antwoord hier, maar ik wil een belangrijk punt toevoegen.

Merk op dat de stdout-stream meestal line-buffered is , dus om ervoor te zorgen dat de uitvoer daadwerkelijk wordt afgedrukt en niet alleen in de buffer blijft zitten wachten om te worden geschreven, moet u moet de buffer leegmaken door uw printf-instructie te beëindigen met een \n

Bijvoorbeeld:

printf("hello world\n");

of

printf("hello world"); 
printf("\n");

of vergelijkbaar, OF u moet fflush(stdout); bellen na uw printf-aanroep.

Bijvoorbeeld:

printf("hello world"); 
fflush(stdout);

Lees hier meer: ​​Waarom spoelt printf niet na de aanroep, tenzij er een nieuwe regel in de format string staat?

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes