View Full Version : [C] Lettura caratteri da file
Zagor HW
01-06-2007, 18:10
Qual è, in assoluto, la funzione più veloce per leggere carattere per carattere da un file tra tutte quelle messe a disposizione dal C? Lo chiedo perché sto tentando di implementare l'algoritmo della codifica di Huffman, e quando vado a leggere file con una quantità elevata di caratteri, anche la lettura di un carattere deve risultare il più veloce possibile, o sbaglio?
Grazie
^TiGeRShArK^
01-06-2007, 18:23
ehmm...
non ti conviene leggere carattere per carattere ad occhio ma ti conviene leggere blocchi di byte se vuoi la massima velocità.
Se i file da codificare non sono troppo grandi mi sa ke ti conviene pure leggere prima tutto il file in una volta e lavorarci direttamente in menoria.
Altrimenti puoi procedere codificando per blocchi successivi (abbastanza grandi).
redcloud
01-06-2007, 18:56
Se non ricordo male, il modo più veloce per leggere una serie di caratteri da uno stream è usare la system call read impostando un buffer di 8192 byte.
Parlo di sistemi unix.
^TiGeRShArK^
01-06-2007, 19:08
Se non ricordo male, il modo più veloce per leggere una serie di caratteri da uno stream è usare la system call read impostando un buffer di 8192 byte.
Parlo di sistemi unix.
Mi sa che dipende dalla dimensione dei cluster ad occhio :p
Cmq nulla toglie di poter usare un multiplo di questa dimensione...
sempre se il mio ragionamento è giusto :p
conferme o smentite? :D
redcloud
01-06-2007, 19:33
Ero convinto anche io di questo fatto, ma queste informazioni le presi su un libro di programmazione su sistemi unix, in cui si spiega molto bene come dimensioni superiori a quella da ma indicata, sono semplicemente sprecate.
Zagor HW
02-06-2007, 17:10
Ok, ed in conclusione quale delle tante funzioni messe a disposizione dovrei usare?
io non saprei ma dalle risposte degli altri direi fwrite
ehmm...
non ti conviene leggere carattere per carattere ad occhio ma ti conviene leggere blocchi di byte se vuoi la massima velocità.
Se i file da codificare non sono troppo grandi mi sa ke ti conviene pure leggere prima tutto il file in una volta e lavorarci direttamente in menoria. se ragioniamo così allora può anche fare un file mapping fregandosene delle dimensioni eccessive del file :D
in effetti non mi pare una cattiva idea quella del file mapping... questa codifica di huffman (scusate la mia sonora ignoranza) che d'era? un algoritmo di compressione?
Zagor HW
02-06-2007, 19:53
Si, è un algoritmo usato per la compressione. Potreste fare anche qualche esempio pratico di codice in C? Perchè purtroppo non riesco a seguire molto questi vostre "indicazioni teoriche" e non saprei come trasformarle poi in codice.
Grazie
purtroppo il modo di gestire file mappati in memoria (anche detti file mapping) è dipendente dalla piattaforma: su Windows è in un modo e su Linux in un altro. se però sei disposto a legarti ad una piattaforma allora credo che sia l'ipotesi migliore, anche perché spesso la dimensione di una pagina è un multiplo della dimensione di un cluster. in tal caso la domanda diventa: il programma deve girare su Windows, Linux o altro?
Zagor HW
03-06-2007, 11:41
Teoriacamente su windows, pero deve funzionare sulla shell cygwin, con compilatore GNU.
non ho mai usato cygwin quindi a scanso di dire corbellerie ti espongo entrambi i casi:
* su Windows devi usare CreateFileMapping (http://msdn2.microsoft.com/en-us/library/aa366537.aspx) e MapViewOfFile (http://msdn2.microsoft.com/en-us/library/aa366761.aspx)
* su Linux mmap (http://www.linuxmanpages.com/man2/mmap.2.php)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.