Newsgroup: it.comp.lang.vo-clipper
Titolo: flash su disco

Come faccio ad essere sicuro che il SO abbia effettivamente scritto su disco
il file che sto copiando, prima di cominciare ad usarlo?
In parole povere, qualcosa di simile a SMARTDRV /C,  che scarichi eventuali
cache e/o scritture differite sul disco.
Non trovo l'API adeguata.
Ciao
Massimo


Non dovrebbe essere necessario neanche in rete. I vari strati di cache
dovrebbero rendere il tutto trasparente. L'unico vero problema si ha nel
momento in cui si spegne il PC (magari per un black out): se il file non
è stato scritto fisicamente allora lo perdi. Ma se l'uscita
dall'applicazione e poi da Windows è regolare allora non ci dovrebbero
essere problemi. Addirittura potresti lavorare con il file prima ancora
che esso esista da qualche parte sul disco. Un file temporaneo potrebbe
non essere creato mai fisicamente ed essere gestito (automaticamente)
solo in memoria.
Comunque esiste un servizio del DOS (Int 21h, servizio 68h) che si
occupa proprio di forzare la scrittura sul disco (dovrebbe, ma non ne
sono sicuro, corrispondere al comando COMMIT del Clipper). Solo che non
so se sia compatibile con Windows. Bisognerebbe provare...
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 EMG
Funziona anche in WINDOWS
Ciao,
     Fabrizio Malaguti

 ha scritto nel
messaggio news:WA%Q7.8780$Ah7.2...@news1.tin.it...


 Dopo 20 anni di reti, sono ai primi sintomi di arteriosclerosi?
:-)))



Ho verificato. Il comando COMMIT utilizza INT 21h servizio 68h del DOS.
Da quel che ho potuto capire però funziona Coi databases non con i file
generici.
In VO esiste la funzione Fcommit() che funziona coi files.
Ciao,
    Fabrizio Malaguti

 generici.
Impossibile. Il servizio sunnominato non può certo sapere niente della
distinzione tra DBF e files generici. Per il sistema sono tutti files.



Ok tutto vero. Peccato che la COMMIT si applica solo sui databases.
Ciao,
    Fabrizio Malaguti

 Ok tutto vero. Peccato che la COMMIT si applica solo sui databases.
Scusa se insisto, l'INT 21h servizio 68h richiede in BX l'handle del
file da "flushare". Se tale handle corrisponde ad un file aperto con
FOPEN() è quello che sarà "flushato". Non credo ci possano essere dubbi
al riguardo.


 EMG
Appunto. La COMMIT accetta le workarea in input non gli HANDLE dei file.
Quindi in CLIPPER bisogna utilizzare l'INT 21h a mano.
Ciao,
    Fabrizio Malaguti

 Quindi in CLIPPER bisogna utilizzare l'INT 21h a mano.
Ok, mi sa che ci siamo persi. Se ricordo bene, il discorso era partito
dalla richiesta su come fare il flush di un file aperto con FOPEN(). La
conclusione è che non si può fare con il comando COMMIT del Clipper ma
che si deve utilizzare il servizio 68h dell'INT 21h. Giusto?


 EMG
Esattamente (per il CLIPPER fino alla 5.2 - per la 5.3 non so). In VO é
stata aggiunta la funzione Fcommit() per i file.
Ciao,
    Fabrizio Malaguti

Esattamente (per il CLIPPER fino alla 5.2 - per la 5.3 non so).
Ovviamente vale anche per la 5.3, si tratta di un servizio DOS e non
qualcosa che dipende dal linguaggio.
ciao, acc.   
a...@libero.it

"acc" <a...@libero.ita> ha scritto nel messaggio
news:ji1l1u0lp4iv8a2ba...@4ax.com...

Ho l'impressione che tu abbia letto solo l'ultimo messaggio.
Ciao,
    Fabrizio Malaguti

Ho l'impressione che tu abbia letto solo l'ultimo messaggio.
Ho letto tutto il thread. Mi riferivo alla chiamata DOS 68h
dell'Int21h, che funziona appunto anche per Clipper 5.3.
ciao, acc.   
a...@libero.it

"acc" <a...@libero.ita> ha scritto nel messaggio
news:tkfv1ukbes3n5rkoc...@4ax.com...

Ok. Comunque mi riferivo alla funzione FCommit() presente in VO e non nel
CLIPPER fino alla 5.2 ( se esiste nella 5.3 non lo so ).
Per quanto riguarda la chiamata DOS 68h penso sia possibile da qualunque
linguaggio di programmazione.
Ciao,
     Fabrizio Malaguti