Un programma che scrive su "stdout" scrive su un file? lo schermo? Non capisco cosa significa scrivere su stdout.Cosa significa scrivere su stdout in C?
risposta
Ciò significa che si sta stampando l'output sul dispositivo di uscita principale per la sessione ... qualunque cosa sia. La console dell'utente, una sessione tty, un file o chissà cosa. Quello che il dispositivo può essere varia a seconda di come viene eseguito il programma e da dove.
Il seguente comando scriverà al dispositivo di output standard (stdout) ...
printf("hello world\n");
Che è solo un altro modo, in sostanza, di fare questo ...
fprintf(stdout, "hello world\n");
In quale caso stdout
è un puntatore a un flusso FILE
che rappresenta il dispositivo di output predefinito per l'applicazione. Si potrebbe anche usare
fprintf(stderr, "that didn't go well\n");
nel qual caso si sarebbe inviare l'output al dispositivo di output di errore standard per l'applicazione che può, o non può, essere lo stesso stdout
- come con stdout
, stderr
è un puntatore a un flusso FILE
che rappresenta il dispositivo di output predefinito per i messaggi di errore.
Esiste un esempio in C del comando per scrivere su stdout? Una semplice istruzione printf scrive su stdout? Che ne dici di scrivere su un file con write()? – user2227422
'printf' per scritture di default su' stdout', se vuoi scrivere su un flusso specifico dovresti usare 'fprintf' che accetta un' FILE * 'come flusso di destinazione. – Jack
vedi le mie modifiche ... speriamo che ti aiutino a chiarire per te –
stdout
è lo stream di output standard in UNIX. Vedi http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html#Standard-Streams. Durante l'esecuzione in un terminale, vedrai i dati scritti su stdout
nel terminale e potrai reindirizzare come preferisci.
stdout
sta per flusso di uscita standard ed è un flusso disponibile per il programma dal sistema operativo stesso. È già disponibile per il programma dall'inizio insieme a stdin
e stderr
.
Ciò che indicano (o da) può essere qualsiasi cosa, in realtà lo stream fornisce al proprio programma solo un oggetto che può essere utilizzato come interfaccia per inviare o recuperare dati. Di default è di solito il terminale ma può essere reindirizzato dove vuoi: un file, un goint pipe in un altro processo e così via.
stdout è lo stream di file di output standard. Ovviamente, è il primo e il puntatore predefinito per l'output è lo schermo, tuttavia è possibile puntarlo su un file come desiderato!
Si prega di leggere:
http://www.cplusplus.com/reference/cstdio/stdout/
C++ è molto simile a C tuttavia, orientato agli oggetti.
Dipende.
Quando ci si impegna a inviare l'output a stdout
, in pratica si sta lasciando all'utente decidere in quale direzione andare.
Se si utilizza printf(...)
(o l'equivalente fprintf(stdout, ...)
), si sta inviando l'output a stdout
, ma dove che finisce di fatto può dipendere da come invoco il vostro programma.
Se io lancio il programma dalla mia console come questo, ci vediamo in uscita sulla mia console:
$ prog
Hello, World! # <-- output is here on my console
Tuttavia, mi permetto di lanciare il programma come questo, producendo alcuna uscita sulla console:
ma ora avrò un file "ciao.txt" con il testo "Ciao, Mondo!" all'interno, grazie alla funzione di reindirizzamento della shell.
Chi lo sa - potrei anche collegare un altro dispositivo e l'uscita potrebbe andare lì. Il punto è che quando decidi di stampare su stdout
(ad esempio usando printf()
), non saprai esattamente dove andrà finché non vedrai come il processo viene lanciato o utilizzato.
@K Scott Piel ha scritto un great answer here, ma voglio aggiungere un punto importante.
nota che il flusso stdout
è usually line-buffered, in modo da garantire l'uscita è in realtà stampato e non appena lasciato seduto nel buffer in attesa di essere scritti si necessario svuotare il buffer da una terminando la sua dichiarazione printf
con un \n
Es:
printf("hello world\n");
o
printf("hello world");
printf("\n");
o simile, O è necessario chiamare fflush(stdout);
dopo la chiamata printf
.
Es:
printf("hello world");
fflush(stdout);
Per saperne di più qui: Why does printf not flush after the call unless a newline is in the format string?
Significa che scrive nel descrittore di file 1. 'stdout' è come un nome di variabile costante, qualcosa che tutti usano in modo da non avere per ricordare che il numero FD attuale è 1. Ad esempio, quando ho scritto per la prima volta, ho pensato che fosse FD 0 ... :) – CivFan