Bonjour,
Je vous plante le décors. Imaginez un groupe de 1000 personnes qui sont susceptibles de changer d'humeur à tout moment. J'ai une 1001 personne (qu'on nommera la sentinelle) qui doit, si une personne change d'humeur, le noter dans son registre. Pour cela, la sentinelle passe continuellement tour à tour devant chacune des personnes pour vérifier qu'elle n'a pas changé d'humeur depuis son dernier passage. C'est assez fastidieux. L'idéal serait qu'une personne changeant d'humeur s'avance pour se démarquer du groupe et ainsi signaler à la sentinelle qu'elle vient de changer d'humeur.
Passons maintenant au code. Ces personnes sont en fait des fichiers que j'ouvre, lis et ferme à tour de rôle dans une boucle infinie. Résultat, surcharge CPU (boucle infinie) et filesystem (ouverte/fermeture multiple) et donc ralentissement. J'avais donc dans l'idée de faire un peu comme pour les sockets et utiliser un select ou un truc du genre qui se mettrait en sommeil et ne se réveillerait que sur modification d'un fichier.
Je suis sous linux (Fedora) et je me disais que vu que select prenait des descripteur de fichier pour fonctionner, j'allais pouvoir l'utiliser sur des fichiers standard au lieu des sockets traditionnelles. Je teste et la rien à faire. Si j'ouvre mon fichier (fopen) récupère le file descriptor (fileno) puis l'utilise dans select, systématiquement select sort immédiatement avec un retour à 1 me signalant que mon fichier est prêt.
Personne n'aurait un idée ou un piste pour me sortir de ce souci ?
Partager