Newsgroup: it.comp.lang.c
Titolo: Aiuto sui file per favore!

Da molto tempo ormai, sto cercando di approfondire le mie conoscenze sulla
gestione dei file su disco in linguaggio c.
Tuttavia nonostante la mia buona volontà non sono sicuro di avere capito
bene tutto.
Vediamo se qualcuno di voi mi può aiutare ed eventualmente correggere.
In vari esercizi è richiesto di appoggiarsi a un file ed io non so mai
scegliere se il file deve essere binario o di testo.
So che dalla scelta effettuata dipende anche la classe di funzioni che si
possono usare per la lettura e la scrittura : per esempio fread e fwrite si
possono usare solo con file in modalità binaria.
Se per esempio devo registare testo e numeri che tipo di file devo adottare?
Se per esempio devo scrivere su un file il nome di una azienda e poi alcuni
suoi dati numerici , credo che sia conveniente usare la modalità binaria
presupponendo la creazione di una struttura ad hoc.
Posso usare i file di testo in questo caso?
Quali sono i vantaggi e svantaggi delle due scelte?A che cosa bisogna stare
molto attenti?
Scusate ma sono un po confuso .....

 A che cosa bisogna stare molto attenti?
Alla privacy delle informazioni.
I file di testo sono apertamente leggibili
da chiunque.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

stato progettato, ovvero Unix e i suoi derivati.
   La traduzione "\n" -> "\r\n" che fanno i sistemi dos/win, o "\n" ->
"\r" dei mac differenzia il comportamento di funzioni come fprints,
fputs, ecc. a seconda che il file sia *aperto* in modalita` binaria o
in modalita` testo.
   Tuttavia la scelta tra il salvataggio di dati in modalita`
"binaria" oppure "di testo" si presenta anche quando si lavora su
sistemi unix; laddove con "salvare in modalita` binaria" si intenda il
salvare una struttura X con un'operazione del tipo "fwrite(&X,
sizeof(X), 1, fp)", e con "salvare in modalita` testo" si intenda un
operazione del tipo "fprintf(fp, "%d\n%s\n%f\n", X.a, X.b, X.c)".
   Il primo caso (binario) consente di rileggere la struttura con una
semplice chiamata a fread(), mentre il secondo caso (testo) richiede
operazioni di parsing *solitamente* piu` complesse e meno efficienti.
   La rilettura "binaria" dei dati funziona se e` eseguita dalla
stessa macchina che ha eseguito la scrittura [1], ma richiede varie e
onerose operazioni di correzione (a runtime o a livello di sorgente),
qualora la lettura sia eseguita da una macchina che ha un diverso
ordinamento dei byte, diverse dimensioni dei tipi standard, ecc.
   Mentre un sorgente che scriva *ad esempio* gli interi come sequenza
di caratteri con printf, e li rilegga con scanf, sarebbe piu`
facilmente portabile su architetture diverse [2].
   A mio personalissimo avviso, nella maggioranza dei casi, si
potrebbe ricondurre il problema alla scelta tra un codice piu`
efficiente e meno portabile, e uno meno efficiente ma piu` portabile.
[1] Eventualmente da un programma compilato con lo stesso compilatore
e con le stesse opzioni di allineamento dei dati in memoria.
[2] Certo, il malaugurato caso di interazione tra sistemi ASCII e no
ASCII richiederebbe ulteriori precauzioni :)
-- 
Totuccio.

 mascherati.
... ed assolutamente non portabili su architetture diverse.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Porc i' mond che cio' sott i piedi!
V. Catozzo

efficiente e meno portabile, e uno meno efficiente ma piu` portabile.
Siamo d'accordo su tutto.  E' cio' che ho detto anch'io.
-- 
The Follet