Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[?] a che serve fflush(stdout); ??

2,348 views
Skip to first unread message

Claudio Gamberini

unread,
Jul 5, 2002, 6:30:20 AM7/5/02
to
salve, spesso in esempi di codice riguardanti i socket ho notato l'utilizzo
della funzione fflush. a che serve ?
se non la metto cosa cambia ?

ES:

printf ("send()\n");
fflush(stdout);
while( (nwrite<nread) && ((n=send(newsocketfd, &(buf[nwrite]),
nread-nwrite, 0)) >=0) ) {
nwrite+=n;
printf("\neseguita send->%d\n", n);
fflush(stdout);
}

GRAZIE


Maurizio Penna

unread,
Jul 5, 2002, 6:46:24 AM7/5/02
to
Premetto che non lo mai vista, ma assomiglia molto a:
cout << flush
Se cosě fosse, serve a svuotare il buffer dello standard output

ciao.


"Claudio Gamberini" <cgamberiniNO...@libero.it> ha scritto nel
messaggio news:0zeV8.109637$Kt3.2...@twister2.libero.it...

Matic

unread,
Jul 5, 2002, 7:35:52 AM7/5/02
to


lì dovè non serve a niente..
io la uso per scrivere sullo schermo una stringa senza il '\n' in fondo.

da quello che intuisco posso dire che le stringhe vengono passate allo
schermo per essere printate da una sepcie di buffer che viene svuotato
solo all'arrivo di '\n'. fflush( stdout) serve per forzare il buffer a
passare la strigna anche se non cè un \n. . . . credo

ciao

Gianluca Di Corato (aka sgrung)

unread,
Jul 5, 2002, 2:50:49 PM7/5/02
to
Con l'I/O standard tratti dati che transitano in un buffer che poi viene
svuotato sugli stream (puntatori a file (FILE *)) a cui l'output è destinato...
con fflush(stdout) non fai altro che forzare tutto l'output destinato
allo stdout ad essere emesso... in questo caso sei certo che la stringa
in argomento a printf "send()\n" venga stampata sullo stream a cui
printf in genere manda l'output (stdout) (usa fprintf(3) se vuoi
specificare tu il FILE *; printf(fmt,...) non è altro che
fprintf(stdout, fmt, ...) ).

--
| .-.
Gianluca Di Corato | : | : I N P E A C E W E T R U S T
(aka sgrung) | '/|\'

Claudio Gamberini

unread,
Jul 5, 2002, 4:44:26 PM7/5/02
to
> con fflush(stdout) non fai altro che forzare tutto l'output destinato
> allo stdout ad essere emesso... in questo caso sei certo che la stringa
> in argomento a printf "send()\n" venga stampata sullo stream a cui
> printf in genere manda l'output (stdout)

cosa vuol dire "sei certo" ? perchè quando io faccio prinft("CIAO"); non
sono certo che me lo stampi a video ???

GRAZIE


Gianluca Di Corato (aka sgrung)

unread,
Jul 5, 2002, 7:01:25 PM7/5/02
to
Un'istruzione successiva al printf("CIAO") potrebbe provocare
un'interruzione brusca del programma e dato che printf scrive su
FILE *stdout in fully buffered aspetta che il buffer sia pieno prima di
svuotarlo... il buffer potrebbe anche non essere svuotato;
infatti in genere output con "priorità assoluta" (che
deve essere emesso immediatamente) viene scritto sullo stderr che è
(almeno così dice l'ANSI C) unbuffered.
Con funzioni tipo setvbuf() e setbuf() (non so se sono nell'ANSI C, in
genere le uso in unix) puoi decidere il tipo di buffering per un
determinato stream puntatore a FILE.

Kronos

unread,
Jul 6, 2002, 11:14:49 AM7/6/02
to
"Gianluca Di Corato (aka sgrung)" <gdcs...@libero.it> ha scritto:

> dato che printf scrive su FILE *stdout in fully buffered

stdout e stdin sono line buffered.

ciao
Kronos
--
Home: http://kronoz.cjb.net
Tentare e` il primo passo verso il fallimento.
Homer J. Simpson

Gianluca Di Corato (aka sgrung)

unread,
Jul 6, 2002, 3:31:42 PM7/6/02
to
In article <ag71h9$t9$1...@dreamland.darkstar.net>, Kronos wrote:
> "Gianluca Di Corato (aka sgrung)" <gdcs...@libero.it> ha scritto:
>> dato che printf scrive su FILE *stdout in fully buffered
>
> stdout e stdin sono line buffered.
eggià, sorry... se stdout è aperto (come al solito) su un terminale,
lavora in line buffered, altrimenti fully buffered.
0 new messages