2017-10-13 10 views
1

Dites que j'ouvre avec succès un fichier à lire avec fopen, mais que fgets échoue. Je veux que ma fonction définisse errno de manière appropriée.Quelle est la valeur errno la plus précise à utiliser pour les échecs de fgets?

Il y a beaucoup d'errno vals associés aux opérations de dossier, mais aucun ne semble explicite à "quelque chose est arrivé en lisant ceci.". fgets ne définit pas non plus errno. Quelle est la valeur errno la plus proche à utiliser pour les échecs de lecture à partir d'un fichier déjà ouvert?

Quelle est la valeur d'erreur la plus proche à utiliser pour les échecs de lecture à partir d'un fichier déjà ouvert?

+0

Pourquoi 'fgets()' échoue? – Barmar

+1

La raison normale pour 'fgets()' échouer est parce que vous êtes à EOF. Ce n'est pas vraiment une erreur, il n'y a aucune raison de mettre 'errno'. – Barmar

+0

@Barfar fgets ne manque pas, mais sa documentation dit qu'il peut. Chaque autre chemin d'exécution dans mon programme communique en utilisant errno, donc je veux être aussi proche que possible ici pour de futures défaillances potentielles. – DeepDeadpool

Répondre

1

Bien que la norme C lui-même exige rarement errno être réglé, en supposant que vous êtes sur un système ou POSIX POSIX semblable, fgets sera déjà mise errno à une valeur appropriée pour vous. Voir les spécifications pour fgets:

qui précise qu'il peut échouer pour des raisons définies pour fgetc:

La raison pour laquelle il est fait de cette façon est que C et POSIX spécifier tous les fonctions stdio composé en termes d'appels répétés à fgetc ou fputc.

2

Vous pouvez utiliser EIO si votre implémentation le définit. POSIX définit EIO comme "Erreur d'entrée/sortie".