Newsgroup: it.comp.os.linux.sys
Titolo: Lettura&Scrittura File

Salve a tutti,
ho un piccolo problema per la lettura di un file.
Vi descrivo la situazione ;)
Utilizzo le funzioni fopen, fscanf, fclose,  per la lettura.
Il sistema operativo è Unix.
Apro un file che è stato appena scritto e chiuso da una libreria che
richiamo, nel codice di questa libreria prima della chiusura del file esegue
un fflush, e successivamente chiude il file.
Io subito dopo la chiamata a questa libreria apro il file in modalità "r",
ed effettuo un ciclo di lettura.
Inizialmente non trovo nulla come se il file è vuoto, dopo un paio di
istruzioni legge il file correttamente.
Ora la faccenda è molto strana, a meno che il sistema operativo non
bafferizzi e scriva sul file quando fa comodo a lui ignorando il flush ed il
close.
il codice di lettura è il seguente:
funzionelibreria()
pfile=fopen("FileDiOutputLibreria.txt","r");
do{
 fscanf(pfile,"%s",testo);
}while (!feof(pfile));
fclose(pfile);
grazie....

 fclose(pfile);
Vabbe`, a parte l'OT clamoroso, questo non mi dice
molto, per esempio: cos'e` "testo"?
Ed inoltre: cosa ci dovrebbe essere nel file?
Inoltre, per il debugging, non sarebbe meglio leggere
un carattere alla volta e stamparlo?
bye,
-- 
   Piergiorgio Sartor

 wrote in
message news:3fe0379b$0$264$4d4e...@read.news.de.uu.net...

Chiedo scusa signor Devoto Oli se il mio mess.(ops volevo dire messaggio) è
OT, chiedo scusa, ma ho gia scritto nel newsgroups per sviluppatori e come
risposta mi è stato detto di postare su newsgroups che riguardassero il
sistema linux e/o unix, perché il problema potrebbe dipendere dal sistema
operativo.
Visto che il codice non dice nulla dato che non ho messo la parte
dichiarativa delle variabili e soprattuto gli include, ed altre cose che
rendono assolutamente illegibile ed incomprensibile tutto il codice allora
provo a spiegarlo.
1) Un file viene creato, scritto, e chiuso da una funzione.
2) Subito dopo il richiamo della funzione, apro quel file per
leggerlo.(carattere per carattere, stringa per stringa, token per token, è
praticamente indifferente perché il comportamento è analogo per qualsiati
tipo di lettura)
3) Mi trovo il file vuoto alla prima lettura, mentre nelle successive
letture trovo il file con i dati dentro.
Sembra che il sistemi bufferizzi i dati e scrivesse quando ha le risorse
disponibili per farlo, ignorando quindi la chiusura del file.
Volevo solo una conferma, su questo tipo di comportamento dal sistema
operativo e se è possibile cambiare questa impostazione forzando la
scrittura fisica su disco ad ogni chiusura di file.


Anche se il sistema bufferizza la scrittura dei dati su disco questo dovrebbe
essere trasparente alle applicazioni (e tanto meno all'applicazione stessa
che lo scrive): potresti avere eventualmente problemi di consistenza in caso
di disastro tipo crash di sistema o spegnimento non controllato, ma negli
altri casi non te ne dovresti accorgere.
Alessandro.

 disponibili per farlo, ignorando quindi la chiusura del file.
No, non e` cosi`.
I dati sono disponibili nel momento stesso in cui li
scrivi, tutto il meccanismo di bufferizzazione e`, e
deve, essere trasparente, come se non vi fosse.
Il problema che descrivi potrebbe essere causata, per
esempio, da un uso improprio di scanf.
bye,
-- 
   Piergiorgio Sartor


Grazie ;)

"Piergiorgio Sartor"

Ho provato anche altri metodi di lettura dal file e continua a riproporre il
problema.
cmq grazie ora almeno sò che non dipende dal s.o.
bye

fclose(pfile);
loop completamente sbagliato IMO
char	buf[1024];
char	*p;
pfile = fopen("file.txt", "r");
while (fgets(buf, sizeof(buf), fp))
{
  // Rimuovo CR e LF
  if ((p = strchr(buf, '\n')) *p = '\0';
  if ((p = strchr(buf, '\r')) *p = '\0';
.
.
// normale esecuzione ciclo
.
.
}
fclose (fp);