Newsgroup: it.comp.lang.c++
Titolo: I/O files binari

Ciao a tutti,
ho scritto 2 prg: uno in C che fa dei conti e li registra su file binario e
l'altro in VB che contemporaneamente lo legge x visualizzarli, con un ciclo
che
durante gli stati di attesa controlla se sono state aggiunte informazioni.
I prg funzionano, ma non ho inserito controlli particolari. Potrebbero
insorgere problemi o la gestione della lettura/scrittura contemporanea sullo
stesso file e' automatica?
Lo so, sono un po' OT ma i file binari li userete anche voi...
Grazie a chiunque voglia darmi una veloce risposta.
Edoardo

stesso file e' automatica?
La scrittura e' generalmente esclusiva (nel senso che non si possono
compiere altre operazioni nel contempo) e penso proprio che la
gestione dei conflitti non sia automatica, quindi va gestita a mano.
Aspetto smentite.
--
Andrea Laforgia (ICQ 87230455)
Programmatori si nasce, non si diventa.

 Aspetto smentite.
Io vedo due problemi: la bufferizzazione dell'I/O, ed il fatto che
alcune informazioni (tipo la lunghezza del file in bytes) possono
essere state acquisite all'atto dell'apertura e non vengono piu'
riaggiornate.
Bisognerebbe che al processo che legge venisse detto che il file gli
e' cambiato "sotto i piedi": in Unix ci sono i segnali.  Se pero' e'
per questo, in Unix non userei PER NULLA un file, ma qualche altra
forma di IPC, tipo pipe o sockets...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Murphy's law: "Anything that can go wr
/bin/fortune: segmentation fault - core dumped


Il file viene periodicamente modificato con l'aggiunta di una matrice che
rappresenta il risultato campionato di una simulazione. Viene quindi aperto
come "wb" all'inizio e chiuso solo a fine simulazione.
Durante questa apro il prg scritto in VB che apre il file come "For Binary",
legge le matrici scritte e visualizza l'animazione. Nei tempi morti (senza
eventi in coda) calcola il numero di matrici presenti nel file con
l'operazione LenghtOfFile(filenum)\dim1Matrice e se questo numero e' > del
precedente fa ripartire il Play dell'animazione. A suo tempo ho letto che i
file binari si possono leggere/scrivere contemporaneamente e ho sfruttato
direttamente la cosa, lavorando (x il VB...) in Win NT 4. Il tutto funziona
bene e mi permette di vedere i risultati della simulazione mentre gira ed,
eventualmente, di fermarla, modificarne i parametri e farla ripartire a
piacimento. Ma alcuni mi dicono che a lungo andare potrei generare una
combinazione di richieste distruttiva. Sara' cosi'?
Edoardo

 potrei generare una combinazione di richieste distruttiva. Sara' cosi'?
Se uno legge e l'altro allunga e basta il file, non vedo problemi; l'unica 
cosa che puo' succedere e' che NON venga garantita l'atomicita della 
scrittura della matrice. Puo' accadere che il programma in VB legga il file 
quando e' stata scritta solo meta' della matrice. Se la matrice ( come 
credo ) ha lunghezza fissa, basta verificare che il file sia piu' lungo di 
tanto.
Sotto NT4 dovrebbero esistere dei file "speciali" tipo stream; ricordano un 
po' le pipe di unix, solo che sono completamente bufferizzate... pero' 
forse mi confondo con OS2 ... qualcuno ha qualche info in piu' ( o 
correzione ? )

 tanto.
Il controllo c'e'. Non legge nulla che non sia una matrice intera, di cui
calcola le dimensioni all'inizio. Stranamente questa non corrisponde
esattamente a numero_valori*dim_valore, ma nessun pb.
Edoardo