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
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++.
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).
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)
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.
- 1. Comment définir une classe spécifique << opérateur en C++
- 2. SuperTab Plugin ne fonctionne pas avec la fonction omnicomplete (<C-X><C-O>)
- 3. Comment fonctionne fprintf en C++?
- 4. Surcharge << opérateur C++ - Pointeur vers la classe
- 5. C# - delegate System.Func < >
- 6. Dynamic Byte Array en C# par programmation Socket [Liste <byte> ne fonctionne pas]
- 7. Comment nouveau mot-clé fonctionne en C#
- 8. Comment fonctionne l'itérateur d'insertion en C++
- 9. problème de surcharge l'opérateur <en C++
- 10. Quelque chose comme print END << END; en C++?
- 11. Comment utiliser les opérateurs >> et << pour les données binaires en C++?
- 12. C# List <> GroupBy 2 Values
- 13. C#: Comment rendre un thread IEnumerable <T> sécurisé?
- 14. C#: Comment mettre en œuvre IOrderedEnumerable <T>
- 15. Comment remplacer < and > en C++/CLI?
- 16. Comment remplacer la liste <T> .IsReadOnly en C#
- 17. <%=yield%> ne fonctionne pas dans les modèles nommés
- 18. Comment surcharger correctement l'opérateur << pour un ostream?
- 19. Jquery ajouter <select> ne fonctionne pas dans IE7, mais fonctionne dans firefox
- 20. Sélection de l'attribut de l'ancêtre; "../ .." fonctionne, "ancestor :: <tagname>" ne fonctionne pas
- 21. C++ Minuteur ne fonctionne pas?
- 22. C# application ne fonctionne pas
- 23. Comment fonctionne MonoTouch?
- 24. C# comparaison 2 liste <object>
- 25. IEnumerable <T> en C#
- 26. C# dictionnaire <> clé manquante
- 27. Comment fonctionne Excel VSTO?
- 28. Comment fonctionne une catégorie?
- 29. C# obtenir le type générique <T> donné T
- 30. self.class_eval << DEF ... DEF