|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2005
Città: Salerno
Messaggi: 477
|
domanda per esperti
Salve ragazzi, mi trovo di fronte ad un problema a cui non riesco a trovare una spiegazione!
Supponendo di avere un file scritto in c che contiente una: char *str = "Ciao mondo"; printf("Salve mondo\n"); write(1,str,10); il problema è il seguente: Se eseguo normalmente a.out viene eseguita prima la printf e poi la write. Ma se eseguo a.out > file ; cat file, viene eseguita prima la write e poi la printf! Come mai accade questo!!!???
__________________
Felice di aver trascorso la mia adolescenza con winning eleven Toshiba A500-14F
|
|
|
|
|
|
#2 |
|
Registered User
Iscritto dal: Feb 2005
Messaggi: 1856
|
forse è meglio se lo chiedi sulla sezione programmazione
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Sposto in programmazione.
ciao |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Le funzioni di I/O come la printf sono, notoriamente, bufferizzate. Le funzioni native come la write non credo che siano bufferizzate (dovrei comunque leggere bene la documentazione Non so spiegarti esattamente e precisamente perché c'è questa differenza. Credo che il problema sia appunto una questione legata al buffering. In generale, comunque, bisogna stare attenti ad utilizzare in modo "mixato" le funzioni native e le funzioni "di alto livello" della libreria standard del "C". Se vuoi risolvere la cosa, puoi fare così: Codice:
char *str = "Ciao mondo";
printf("Salve mondo\n");
fflush (stdout);
write(1,str,10);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Salerno
Messaggi: 477
|
Quote:
Cmq sono riuscito a capire il perchè....o almeno credo, quindi adesso lo scrivo casomai servisse ad altri! La write come hai detto tu è una funzione nativa di linux ed è UNDBUFFERED, cioè appunto le istruzioni di I/O non bufferizzano i caratteri e vengono eseguite immediatamente, mentre la printf è una funzione della libreria standard di I/O ed è LINEBUFFERED ossia il buffer viene svuotato (e l'operazione di I/O viene eseguita) ogni qualvolta si incontra un carattere di newline o quando questo è pieno. Quindi viene prima "scritta" la write perchè essendo unbuffered i caratteri vengono scritti immediatamente, e poi la printf quando si incontra il carattere di newline....in sostanza è quello che avevi detti tu, più o meno. Grazie e ciao!
__________________
Felice di aver trascorso la mia adolescenza con winning eleven Toshiba A500-14F
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Naples
Messaggi: 3903
|
Oppid domani andiamo insieme all'esame della Rescigno?
__________________
Cancellato stare lucido dal mio vocabolario -Speaker Cenzou- |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 25-04-2006 alle 20:08. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Feb 2005
Città: Napoli (provincia)
Messaggi: 2361
|
Quote:
EDIT: oltretutto suggerirei, quando capita, di scriverlo che si tratta di un esercizio di esame. Anche a me è capitato di vedere richieste alquanto "bizzarre" che diventano "normali" viste in un ottica di esame. Almeno si capisce che è un problema da spiegare e NON da risolvere...
__________________
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Salerno
Messaggi: 477
|
Quote:
__________________
Felice di aver trascorso la mia adolescenza con winning eleven Toshiba A500-14F
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Napoli (provincia)
Messaggi: 2361
|
tutto fatto!
__________________
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:01.










Toshiba A500-14F

Raffo™ (io, non la birra) |
|
tutto fatto!








