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.
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.
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 se no prova a postare l'errore preciso ed un po' del codice interessato
Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00
Azz !! Per inserire altri controlli sulle dir (Diritti di prot., etc) ho eliminato il controllo per escludere la directoty corrente e quella padre (. e ..)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 se no prova a postare l'errore preciso ed un po' del codice interessato
thanks
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.
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
Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00
good idea !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