J'ai des problèmes avec un test de logiciel automatisé, qui blâme une utilisation de la ressource libérée lorsque j'utilise fd_clr (3) après avoir utilisé Fermer (3) dans une FD. Y a-t-il quelque chose qui ne va pas avec cela?
3 Réponses :
Le La raison pour laquelle vous voyez le fd_clr () code> ne modifie que local
fd_set code>, qui est une structure de données C pour stocker des informations sur une liste des descripteurs de fichiers. P>
ferme () code> est un appel système qui ferme le descripteur de fichier. P>
fd_set code> est utilisé dans le
SELECT () code> appel système. Avec
SELECT () CODE> Vous obtenez des informations sur l'état de la liste des descripteurs de fichier stockés dans votre
fd_set code> struct. P>
fd_clr () code> juste en dessous du
Fermer () code>, est qu'il n'y a plus besoin / but en demandant à l'état si le descripteur de fichier fermé . p>
Il n'y a plus besoin / but de demander à l'état si le descripteur de fichier fermé. i> Il n'y a pas seulement aucun besoin de demander à l'état, appelant SELECT () code> sur un descripteur de fichier fermé est Il est également faux que le descripteur de fichier puisse être réutilisé par un autre thread pour un fichier entièrement indépendant.
Alors, fd_isset et fd_clr font partie de l'API PSelect, en savoir plus sur la page Man ici http://man7.org/linux/man-pages/man3/fd_clr.3.html P>
Il gère essentiellement une liste de tous les numéros de fichier que vous souhaitez attendre, dans votre prochain appel à PSélectionnez, ce qui précise donc un fichier que vous avez fermé a du sens. P>
Votre code demande, pour tous les fichiers que j'écoutais, fermez le fichier et retirez de l'ensemble. P>
Fermer () ferme le fichier. Vous ne devez pas appeler à plusieurs reprises sur le même fichier ou vous verrez cette erreur. Peut-être qu'un autre code ferme également le fichier? P>
Je vérifierai si Fermer est appelé le même fichier dans un autre code. Merci!
Si le logiciel marque vraiment une telle utilisation de comme un travail autour, vous pouvez transposer le fd_clr code>, le logiciel automatisé est cassé. Vous êtes
fd_clr code> est précisément le moyen de le faire. P>
ferme () code> et
fd_clr code> qui ne changera pas la signification du code, mais apaisera l'outil d'analyse de buggy . p>
@SomeProgrammerDude Je suis d'accord. Il est demandé à beaucoup de ces questions car les gens ne font pas la recherche appropriée à l'avance.
Si les gens comprenaient complètement tout ce qu'ils ont lu, Stackoverflow n'existerait pas.
Ensuite, essayez d'écrire ce que vous avez dérangé sur ce que vous avez lu dans votre question. Que vous demandez-vous spécifiquement? Quels sont vos doutes? Tes pensées? Et s'il vous plaît lire Les pages d'aide , prendre The SO Tour A >, lisez à propos de Comment poser de bonnes questions , ainsi que Cette question de question .