J'ai écrit un 'sink' en utilisant boost :: iostreams, de sorte que je puisse essentiellement exécuter mon propre code lorsque quelqu'un essaie d'écrire sur un objet iostream. Malheureusement, il y a un tampon quelque part dans le système, de sorte que la fonction write() de mon Sink n'est appelée que toutes les 4 Ko environ. C'est un problème car le puits que j'implémente est de taille fixe (128 octets par exemple). Une fois que ces données ont été écrites, il faut retourner une erreur à l'appelant (quelque chose comme 'disque plein'). de la mémoire tampon, l'appelant est capable d'écrire quelques kilo-octets de données et aucune erreur n'est renvoyée, puis plus tard lorsque le tampon est vidé, les données supplémentaires sont silencieusement perdues, ce qui me cause des problèmes.Comment pouvez-vous désactiver le tampon dans un puits boost :: iostreams?
Est-ce que quelqu'un sait s'il est possible de désactiver ce tampon? J'ai essayé beaucoup de suggestions ici pour les iostreams génériques (par exemple pubsetbuf) mais aucun d'entre eux ne semble s'appliquer à l'implémentation de Boost.
Le code problème fait partie d'une bibliothèque, je travaille sur, qui est available from GitHub si elle aide (run « make check » et vous verrez un échec en raison de ce problème.)
Toute suggestion serait grandement apprécié!
Hmm ... la documentation sur la mise en mémoire tampon dit '[A fournir dans la prochaine version]' daté du 02 fév 2008' ... soupir ... – Inverse