2017-06-06 2 views
0

Lorsque j'ai suivi les instructions du traitement des messages Pipe/Filter du document Botan, je me suis heurté à une erreur d'erreur inattendue.Exception d'anomalie du tuyau Botan

Mon code est très simple:

ifstream in("2.txt", ios::binary); 
ofstream out("2.enc", ios::binary); 
AutoSeeded_RNG rng; 
SymmetricKey key(rng, 16); // a random 128-bit key 
InitializationVector iv(rng, 16); // a random 128-bit IV 

Pipe pipe(get_cipher("AES-128/CBC/CTS", key, iv, ENCRYPTION), new DataSink_Stream(out)); 
pipe.start_msg(); 
in >> pipe; 
pipe.end_msg(); 
cout << in.fail() << endl; 

Il serait toujours la sortie 1, puisque le failbit est toujours à 1.

Est-ce un bug ou est-il un problème avec mon code?

Répondre

0

Voici comment les flux d'entrée C++ fonctionnent; Lorsqu'une lecture est tentée après EOF, failbit and eofbit are set.

Nous pouvons voir à partir du code Botan documenté que operator>> will throw an exception if only failbit is set after extraction is attempted; Bref, vous n'avez rien à craindre ici. L'ordinateur vous indique simplement que vous avez consommé toutes les données d'entrée .


Ce n'est pas seulement ce que eofbit signifie dans le sens le plus strict, mais la façon dont operator>> œuvres de Botan (lecture autant que possible) nécessite une tentative de lecture au-delà EOF; sinon, il ne saurait pas quand s'arrêter!