PDA

Visualizza la versione completa : [C] Bus error


Ed_Bunker
09-10-2004, 22:38
Ciao, un processo che effettua una ricerca riscorsiva su una directory (E le sottodirectory) dopo diversi istanti di esecuzione termina "generando" un bus error. Da cosa potrebbe dipendere ?
Risorse (Quali) non piu' disponibili ?

Grazie.

/dev/null
10-10-2004, 00:54
Uhm... L'errore che si trova piu' spesso in questo genere di operazioni e' usare la ricorsione sulle dirs "." e ".."...
In pratica, quando scanni una directory, ti vengono restituiti, oltre agli altri files e directory, anche le dirs . (la dir corrente) e .. (la dir superiore)...
Quindi se te non effettui nessun controllo avviene che vai a scannare una di queste due dir credendo che sia uno sottodirectory, mentre non lo e' affato...

Spero di aver capito il tuo problema :fagiano: se no prova a postare l'errore preciso ed un po' del codice interessato


:ciauz:

Ed_Bunker
10-10-2004, 10:20
Originariamente inviato da /dev/null
Uhm... L'errore che si trova piu' spesso in questo genere di operazioni e' usare la ricorsione sulle dirs "." e ".."...
In pratica, quando scanni una directory, ti vengono restituiti, oltre agli altri files e directory, anche le dirs . (la dir corrente) e .. (la dir superiore)...
Quindi se te non effettui nessun controllo avviene che vai a scannare una di queste due dir credendo che sia uno sottodirectory, mentre non lo e' affato...

Spero di aver capito il tuo problema :fagiano: se no prova a postare l'errore preciso ed un po' del codice interessato


:ciauz:
Azz !! Per inserire altri controlli sulle dir (Diritti di prot., etc) ho eliminato il controllo per escludere la directoty corrente e quella padre (. e ..)

thanks :)

Ed_Bunker
10-10-2004, 15:55
No, no... :( Il controllo era acnora presente. E poi mi sono accorto che restituisce il bus error "solo" se parte da una root con moltissimi file e sottodirectory (Ad es. /usr).
In directory di medie dimensioni come /home o altre il processo termina correttamente. Fatto sta che non capisco da cose provenga tale errore.

/dev/null
10-10-2004, 16:10
Il motivo dell'errore e' sempre lo stesso allora: ci sono troppi file descriptors aperti...
Prova a reimplementare il ciclo senza usare la ricorsione: se usa quella apre migliaia e migliaia di files ed alla fine il kernel gli invia un bel segnale d'errore...

Fai una prova cosi': tieni una variabile globale che inizializzi a 0...
Poi, ogni volta che apri un nuovo file/directory incrimenti tale var e la decrementi quando chiudi un file/directory...
Ogni ciclata della funzione stampa questa variabile e guarda che valore ha prima che il programma termini...
Se quella var ha un valore troppo grande l'errore e' sicuramente questo :)


:ciauz:

Ed_Bunker
10-10-2004, 16:53
Originariamente inviato da /dev/null
Il motivo dell'errore e' sempre lo stesso allora: ci sono troppi file descriptors aperti...
Prova a reimplementare il ciclo senza usare la ricorsione: se usa quella apre migliaia e migliaia di files ed alla fine il kernel gli invia un bel segnale d'errore...

Fai una prova cosi': tieni una variabile globale che inizializzi a 0...
Poi, ogni volta che apri un nuovo file/directory incrimenti tale var e la decrementi quando chiudi un file/directory...
Ogni ciclata della funzione stampa questa variabile e guarda che valore ha prima che il programma termini...
Se quella var ha un valore troppo grande l'errore e' sicuramente questo :)


:ciauz:

good idea !

:) :ciauz:

Loading