Newsgroup: it.comp.lang.vo-clipper
Titolo: Aprire un file senza cache

Cari amici, qualcuno (forse acc), tempo fa, aveva chiesto come si poteva
disabilitare la cache durante le operazioni a basso livello con i files.
Forse ho trovato: basta specificare il flag FILE_FLAG_NO_BUFFERING come
sesto parametro della funzione CreateFile(). Ci sono diversi requisiti
da rispettare che mi sembrano un po' complicati. Comunque provate un po'
e fateci sapere...
Ciao a tutti.
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

e fateci sapere...
Non e' esattamente quello che cercavo, questo flag disabilita
totalmente la cache e puo' essere utile in determinate situazioni.
A me invece interessava invalidare la cache di lettura del filesystem,
per fare si' che le "performances" delle successive operazioni di
accesso al disco non siano influenzate dalle letture precedenti, pur
lasciando la cache abilitata.
Insomma, qualcosa di analogo all'opcode assembler INVD presente dai
486 in su, ovviamente qui ci riferiamo alla cache della CPU.
ciao, acc.   
a...@libero.it

 486 in su, ovviamente qui ci riferiamo alla cache della CPU.
Purtroppo ho scarsissime conoscenze di ASM Intel.


il disabilitare del tutto la cache?
Nein, nein !
Non "ad ogni lettura", piu' semplicemente comandare l'invalidazione
della cache, es:
proc test()
	Leggi1()
	ResettaLaCache()
	// il codice che segue non e' influenzato
	// dalle letture precedenti della proc Leggi1()
	Leggi2()
return
ciao, acc.   
a...@libero.it

 return
Vediamo se ho capito: all'interno di Leggi1() la cache in lettura lavora
regolarmente. Finito Leggi1() la cache viene svuotata e quindi Leggi2()
parte come se il programma (dal punto di vista della cache) iniziasse in
quel momento (anzi, come se la macchina fosse stata accesa in quel
momento). Ho detto bene? Se sě, purtroppo non ti so aiutare... :-(


Se sì, purtroppo non ti so aiutare... :-(
Beh, anch'io ho cercato invano nelle API Win32...ma non e' detta
l'ultima parola, la prossima versione di uindos implementera' tale
funzione, la cui esecuzione sara' pero' subordinata alle decisioni di
Bill Gates, in pratica il S.O. si collega al sito di m$ e se riceve il
consenso svuota la cache altrimenti no.
ciao, acc.   
a...@libero.it

 consenso svuota la cache altrimenti no.
Già, purtroppo non è uno scherzo... :-(


Già, purtroppo non è uno scherzo... :-(
Su un vecchio documento (fonte M$ datato 1996), ho trovato tracce di
documentazione su una di quelle estensioni dell'int 21h introdotte da
Windows 95, per intenderci quelle con codici > 7000h che comprendono
quei servizi alternativi per la gestione dei LFN (le stesse usate
dalla famosa libreria dblfn).
La funzione e' la 710Dh (int 21h) ed e' cosi' descritta:
Flushes file system buffers and caches and optionally remounts the
drivespace volume. Any write operations that the system has buffered
are performed, and all waiting data is written to the appropriate
drive.
Ma la parte piu' interessante riguarda un parametro che se impostato
ad 1:
Resets the drive, flushes the file system buffers, and flushes and
invalidates the cache for the specified drive.
 
La parte oscura e' che non si capisce se questo servizio e' supportato
anche da win98, ME, NT etc.  e non e' chiaro se il volume sul quale
viene richiesto il servizio debba precedentemente essere "lokkato".
Per ora ottengo un bel GPF, a causa di un conflitto col driver della
scheda grafica (certo che alla m$ ne hanno di fantasia), seguito da
immediato inchiodamento del sistema.
ciao, acc.   
a...@libero.it