Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion d'erreurs dans les flux standard

2 réponses
Avatar
Sylvain Togni
Les std::iostream ont 3 bits d'états :

- std::ios::eofbit : la fin du flux a été atteinte,
- std::ios::badbit : une erreur hardware est survenue,
- std::ios::failbit : erreur de format.

Ce que je comprend pas c'est comment un std::istream peu faire
la distinction entre la fin du flux et une erreur hardware,
sachant qu'il utilise un std::streambuf dont les fonctions
d'extraction n'ont qu'un type d'erreur (traits_type::eof()).

Comment le std::istream sait-il s'il faut mettre à 1 son
eofbit ou son badbit ?

--
Sylvain Togni

2 réponses

Avatar
Jean-Marc Bourguet
Sylvain Togni writes:

Les std::iostream ont 3 bits d'états :

- std::ios::eofbit : la fin du flux a été atteinte,
- std::ios::badbit : une erreur hardware est survenue,
- std::ios::failbit : erreur de format.

Ce que je comprend pas c'est comment un std::istream peu faire
la distinction entre la fin du flux et une erreur hardware,
sachant qu'il utilise un std::streambuf dont les fonctions
d'extraction n'ont qu'un type d'erreur (traits_type::eof()).

Comment le std::istream sait-il s'il faut mettre à 1 son
eofbit ou son badbit ?


Si le streambuf jette des exceptions.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
kanze
Sylvain Togni wrote:
Les std::iostream ont 3 bits d'états :

- std::ios::eofbit : la fin du flux a été atteinte,
- std::ios::badbit : une erreur hardware est survenue,
- std::ios::failbit : erreur de format.

Ce que je comprend pas c'est comment un std::istream peu faire
la distinction entre la fin du flux et une erreur hardware,
sachant qu'il utilise un std::streambuf dont les fonctions
d'extraction n'ont qu'un type d'erreur (traits_type::eof()).

Comment le std::istream sait-il s'il faut mettre à 1 son
eofbit ou son badbit ?


Il y a deux cas où istream positionne bad_bit :

-- si rdbuf() renvoie un pointeur null, ou
-- si une fonction du streambuf retourne avec une exception.

Si sgetc retourne avec EOF, c'est eofbit qui est positionné (qui
peut déclencher le positionnement de failbit, mais pas
forcément).

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34