2009-08-22 25 views
10

Come trovare tutti i file aperti in un processo (da dentro se stesso)?Chiusura di tutti i file aperti in un processo

Questo sembra utile dopo lo fork() (prima dello exec()).

io conosca l'esistenza di getdtablesize() e il più portabile sysconf(_SC_OPEN_MAX), ma sembra inefficiente per tentare di chiudere ogni valido descrittore di file, se c'è un file aperto dietro o no. (Sono anche consapevole dei pericoli dell'ottimizzazione prematura, questo è più sull'estetica immagino :-)

risposta

3

Può sembrare inefficiente tentare di chiudere tutti i descrittori di file, ma in realtà non è poi così male. L'implementazione della chiamata di sistema per cercare un descrittore di file dovrebbe essere abbastanza efficiente se il sistema è valido.

Se si desidera trovare solo chiudere i descrittori di file aperti, è possibile utilizzare il filesystem proc sui sistemi in cui esiste. Per esempio. su Linux,/proc/self/fd elencherà tutti i descrittori di file aperti. Esegui il iter su quella directory e chiudi tutto> 2, escluso il descrittore di file che denota la directory su cui stai iterando.

8

Se il programma sarà chiamando fork e exec, si dovrebbe aprire tutti i descrittori di file con il flag O_CLOEXEC in modo da non dover chiuderli manualmente prima exec. Puoi anche usare fcntl per aggiungere questo flag dopo l'apertura di un file, ma questo è soggetto alle condizioni di gara in programmi multithread.

+0

Benvenuti alle corse. – ybungalobill

Problemi correlati