Aucun problème de lire séquentiellement plein de fichiers en séquence. Il faut donc en ouvrir un par
fopen (qui fait un appel système
open(2)) le lire, puis le refermer par
fclose. On peut recommencer autant qu'on veut. Par exemple, grep -r fait ça sans problème, et si tu fais
grep -rl a /
tous les fichiers lisibles sont lus.
Par contre, il ne faut pas oublier de fermer (par fclose, ou l'appel système
close(2)) les fichiers. Il est important d'en avoir peu ouverts en même temps. Autrefois, ce peu était une vingtaine, mais sur les linux récents convenablement configurés il peut atteindre le millier (voire 32000 en insistant).
De plus tu peux projeter en mémoire (par l'appel système mmap(2)) pleins de fichiers, la limitation étant la zone de swap ou l'espace d'adressage. C'est ainsi que fonctionne dlopen, et mon programme manydl.c [
starynkevitch.net] disponible sur ma page [
starynkevitch.net] montre qu'on peut faire des dizaines (voire centaines) de milliers de dlopen. Le corrolaire intéressant, c'est qu'on peut méta-programmer ainsi en C: depuis un programme C (prog.c compilé en prog), générer à l'exécution de prog un fichier de source C
fichier.c, le compiler (par un
system lançant un
gcc -fPIC -shared -O fichier.c -o fichier.so) puis le charger dynamiquement par un
dlopen("fichier.so", RTLD_GLOBAL); On peut recommencer en pratique beaucoup de fois (peut-être des millions de fois, sans même faire de
dlclose!), la limitation sera pratiquement le temps de compilation cumulé des fichiers fichier*.c ainsi générés, et éventuellement l'espace d'adressage.
----
Basile STARYNKEVITCH
Membre de l'
APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!
Projet logiciel libre:
RefPerSys