2009-05-21 3 views
3

Juste par curiosité, comment iostream accède-t-il au système d'entrée-sortie. (J'ai la mauvaise habitude de réinventer constamment la roue, et je me demande si je peux construire un système d'entrée-sortie personnalisé pour les iostream).Comment fonctionne <iostream>? (C++)

Répondre

9

Pour un guide détaillé des flux IOstream, voir le manuel Standard C++ IOStreams and Locales. Après l'avoir lu, je suppose que vous serez content de gérer avec le statu quo - IOStreams sont probablement la partie la plus complexe de la bibliothèque standard C++.

3

Cela dépend ...

Il interagit en quelque sorte avec le système IO natif du système d'exploitation. Il peut utiliser en interne la bibliothèque C, qui utilise les appels système au noyau, ou utiliser directement les appels système. L'implémentation exacte dépend fortement de la plateforme. Beaucoup de gens diront de ne pas réinventer la roue, mais cela pourrait être une bonne expérience d'apprentissage. Si vous utilisez Windows, examinez les appels de l'API Win32 pour le traitement des fichiers. Si vous utilisez Linux, utilisez la bibliothèque POSIX/C, ou utilisez les appels système (beaucoup plus difficile, je suggère d'aller avec la bibliothèque C).

1

Vous pourriez certainement réinventer la roue.

De nombreuses complications sont ajoutées aux opérateurs de flux pour gérer les jeux de caractères internationaux. Après l'avoir examiné assez profondément, je m'en fichais vraiment. C'est très compliqué et détruit complètement toute chance d'utiliser facilement l'héritage. Cela fonctionne et est disponible cependant. (Je voulais changer le comportement du stockage utilisé lors des conversions)

1

Tous les flux sont dirigés vers un flux de données. Ce streambuf dépendra du type de flux. Un ofstream va à un fstreambuf; cout va à un certain streambuf non spécifié. Si vous voulez personnaliser les choses, cout vous permet d'obtenir ce streambuf et éventuellement le remplacer.

Un motif commun est le "streambuf de filtrage", qui est une interface de streambuf qui transforme son entrée avant de l'envoyer à un autre streambuf. Cela peut être combiné avec cout: sortir le streambuf d'origine, envelopper dans un streambuf de filtrage, et remettre cet emballage en cout. Vous n'avez pas besoin de savoir comment fonctionne le streambuf original.

Questions connexes