Metod Kozelj wrote:
> Hard-core resitev je, da pogledas dolzino datoteke (ali obstaja posebna
> funikcija za to?; moj recept bi bil { fseek (file, 0L, SEEK_END);
> size=ftell(file) } ), potem pa alociras buffer te velikosti. In potem
> naredis zanko branja iz datoteke, vsakokrat pa poizkusis prebrati celotno
> datoteko.
>
Obstaja funkcija stat(), ki vrne med drugim tudi velikost datoteke.
Sicer pa predlagam strategijo:
1) L=strlen("user="), rezerviraj buffer velikosti N+L-1, kjer je N neka
arbitrarna vrednost, napolni ga z niclami (\0)
2) preberi N bajtov datoteke v buffer na odmiku L-1 (L-ti bajt), npr.
fread()
3) if(!strstr(buffer, "user=") && !feof(datoteka)) {
premakni L-1 zadnjih bajtov v bufferju na zacetek
goto 2}
4) ce je strstr() v prejsnji tocki vrnil NULL in si se znasel tu,
iskanega podniza v datoteki ni, sicer je na odmiku, ki ti ga poda
strstr().
Ce je datoteka majhna, lahko seveda uporabis funkcijo stat(), da
ugotovis dolzino, nato rezerviras buffer ter vanj preberes datoteko,
na koncu pa se izvedes strstr().
Z dodatnimi "olajsevalnimi" okoliscinami, kot npr. da je iskani niz
vedno na zacetku vrstice, se lahko potencialno tudi "olajsa" sam
program. V ta namen pa uporabi en od programov s fgets(), ki mislim,
da ga je nekdo ze poslal na listo kot odgovor na ta problem.
-AlesS
-----------------------------------------------------------------------
[EMAIL PROTECTED] I am AlesS of Linux.
http://aless.rulz.org/ Windows is irrelevant.
-----------------------------------------------------------------------