Dans le livre "Le langage de programmation C" indique: p>
"Beaucoup de fonctions dans la bibliothèque Définir les indicateurs d'état lorsque l'erreur ou la fin du fichier se produisent. Celles-ci Les indicateurs peuvent être définis et testés explicitement. De plus, l'expression entier
errno code> (déclarée dans
code>) peut contenir un numéro d'erreur qui donne des informations supplémentaires sur le plus erreur récente. " p> blockQuote> Où puis-je voir une liste de ces fonctions? P>
6 Réponses :
Vous devez supposer que toute fonction peut définir errno, pas seulement celles de la bibliothèque standard. Une liste serait donc un peu inutile. P>
Je ne suis pas d'accord, même si la vie serait certainement plus facile à votre façon! Je me lance actuellement avec certaines bibliothèques intégrées qui renvoient des messages comme "une erreur survenue: errno = 0" afin que l'OP intime, si vous pardez le jeu de mots irrésistible sur votre nom, il serait utile de pouvoir filtrer ces fonctions qui ne définissent pas errno sur des valeurs utiles.
@Adam quel jeu de mots serait-ce? Je suppose que je manque quelque chose d'évident et grossier?
La question ne concerne aucune fonction - c'était à propos de ceux de la bibliothèque standard. La norme documente les fonctions de la bibliothèque qui modifient errno. Ce qui est inutile, c'est de traiter les fonctions garanties pour ne pas modifier errno comme si elles le risquent.
@Neil: un filtre à Butterworth est un circuit électronique classique qui a enseigné aux sous-traits EE dans le cadre de leur bizarrement mathématique. Désolé de décevoir si vous croyiez plus d'impolitesse. :-) @dingo: convient que ces fonctions sont documentées et (nous espérons) suivre les normes. Mon point était que je n'ai jamais rencontré une liste canonique de fonctions qui définissent Erno sur des valeurs utiles.
@Adam Yeah, je connaissais le filtre de Butterworth - j'espérais quelque chose de plus (ou effectivement) impoli :-(
Une question correcte pourrait être quelles sont les valeurs
errno code> peut obtenir et ce que chacun d'entre eux signifie. Vous pouvez les voir énumérés dans
intro (2) code>. p>
Vous pouvez utiliser votre éditeur préféré et la "Rechercher dans les fichiers ..." pour rechercher des fichiers contenant le mot-clé errno code>. p>
Et des polices audacieuses prennent plus d'espace sur le disque?
Je ne te comprends pas. Quoi qu'il en soit, je voulais rechercher des fichiers de bibliothèque (* .C, * .cpp).
Près de toutes les fonctions de la bibliothèque POSIX peuvent définir errno si une erreur se produit, c'est-à-dire lorsque la fonction renvoie -1. Une exception sont des fonctions de filetage car la définition d'une variable d'erreur globale de plusieurs threads serait très dangereuse. Ils rentrent 0 sur le succès, le code d'erreur autrement (ce code est compatible avec Errno afin que vous puissiez utiliser les fonctions StrError et Perror sur elle). P>
Existe-t-il vraiment une implémentation de POSIX qui a des threads mais n'a pas d'errno local sur le thread?
errno code> est spécifié pour être spécifique au thread. -1 pour la désinformation sur cette question.
Je n'ai jamais dit que Erno n'était pas spécifique au fil. Les fonctions de threading ne définissent pas errno de toute façon.
Par la définition d'une variable d'erreur globale de plusieurs threads i>: Selon la norme, le errno code> est une "macro qui se développe à une lvalue modifiable qui a du type int et de filtre de stockage local" Le
errno code> "n'a pas besoin d'être l'identifiant d'un objet".
La norme indique ceci sur La valeur de Erno est zéro au démarrage du programme, mais n'est jamais réglé sur zéro par une bibliothèque
fonction. La valeur de Erno peut être définie sur NONZERO par un appel de la fonction de bibliothèque si une erreur est une erreur, à condition que l'utilisation d'errno n'est pas documentée dans la description de la fonction de cette norme internationale. P>
blockQuote>
Ce qui me dit que toute fonction de bibliothèque peut se viser avec Notez que la norme suggère ce qui suit dans une note de bas de page: p>
Ainsi, un programme qui utilise Comme indiqué dans d'autres réponses, il est courant pour les fonctions qui ne sont pas dans la norme de définir errno code>: p>
errno code> de quelque manière que ce soit, sauf: p>
errno code> à
0 code> li>
errno code> pour la vérification des erreurs doit la définir sur zéro avant l'appel de la fonction de la bibliothèque, puis inspecte-la avant l'appel de la fonction de bibliothèque ultérieure. Bien sûr, une fonction de bibliothèque peut enregistrer la valeur de
errno code> à l'entrée, puis la définir sur zéro, tant que la valeur d'origine est restaurée si
errno code> est toujours. zéro juste avant le retour. p>
blockQuote>
errno code>. p>
@aDam, comme dit Neil, une fonction peut être compilée contre errno.h et définir errno. Il est par définition, impossible de répertorier tous les utilitaires compilés de cette manière d'utiliser la fonctionnalité de base errno. P>
Cela dit, il y a plusieurs manières que des erreurs peuvent être rapportées à un utilisateur. Utiliser Erno n'est qu'un. P>
@Leif, cool que vous travaillez à travers K & R. Je viens de finir de faire la même chose pendant quelques jours pendant mes vacances. (-: