Quelle est la différence entre un fichier File (pointeur *) en C et iostream en C++? Pourquoi sont-ils tous deux appelés flux, ont-ils quelque chose en commun?Quelle est la différence entre le flux de fichiers en C et iostream en C++?
Répondre
Ils traitent tous les deux des fichiers, et "flux" est simplement un terme très général pour les données provenant de certaines sources. La différence réside principalement dans le fait que les objets iostream du C++ sont des classes/objets, et que les données du fichier C sont accessibles via les fonctions f *() définies.
Donc, fondamentalement, même tâche, style d'interface différent.
Elles sont généralement mises en mémoire tampon, ce qui signifie que les E/S que vous effectuez sur un flux ne correspondent pas à l'E/S 1: 1 effectuée sur l'objet système sous-jacent (par exemple un fichier). Par exemple, un appel fread()
pour lire 2 octets pourrait tenter de lire 1 024 octets à partir du fichier, ce qui pourrait à son tour ne renvoyer que 57 si vous étiez si proche de la fin du fichier. Par exemple, La différence est entièrement cachée par l'implémentation du flux, qui retournera 2 octets et se souviendra qu'il en a 55 de plus dans ses tampons. Il satisfera donc la requête de lecture suivante sans toucher au niveau du fichier.
EDIT: Il est à noter que les flux d'erreur par défaut dans les deux langues (stderr
et , respectivement) ne sont pas mis en mémoire tampon. C'est une grande victoire, car elle augmente les chances de sortir votre production à temps. Lors de la poursuite de bogues de crash bizarres en saupoudrant du code avec des instructions printf()
, c'est une très bonne idée d'imprimer dans le flux d'erreurs pour cette raison particulière.
il est plus facile de dire leur familiarité que les différences, car ils n'ont qu'une seule familiarité: ils portent tous deux un terme (courant) commun dans le monde de la programmation.
flux est souvent utilisé pour désigner des données brutes non formées qui ne sont qu'un fragment d'octets binaires. Pensez au contenu du fichier qui a été copié dans la mémoire nouvellement allouée, avant qu'ils ne soient analysés (c'est-à-dire immédiatement après qu'ils ont été copiés), ils ne représentent qu'un petit nombre d'octets binaires. Donc, vous n'avez que des méthodes comme seek() pour y accéder, ce qui fonctionne sur une base d'octets.
Comparez cela aux fichiers texte que vous pouvez ReadLine(), WriteLine(), qui fonctionnent dans des entités de pré-format (appelées lignes dans ce cas). Vous aurez l'idée.
Streams C++ sont extensibles de deux façons que les fichiers C ne sont pas:
- Vous pouvez créer votre propre type de flux et tous les objets streamable se automatiquement celui-ci.
- Si des opérateurs de flux sont définis pour une classe, tout objet de cette classe peut être écrit et lu à partir de n'importe quel flux.
Cet article donne un bon aperçu des différents flux de sortie disponibles en C++.
http://accu.org/index.php/journals/1539
Il compare:
- FICHIER
- std :: flux
- Boost.Format
- FastFormat (fait par l'auteur de l'article Matthew Wilson qui a écrit le Imparfait Livre C++.)
comparer le flux de fichiers entre C et Java
- 1. Quelle est la différence entre 'int?' et 'int' en C#?
- 2. Quelle est la différence entre read et readline en C#?
- 3. Quelle est la différence entre% c et% C dans printf?
- 4. Quelle est la différence entre C et Embedded C?
- 5. Quelle est la différence entre ces déclarations en C?
- 6. Quelle est la différence entre memset et memcpy dans C
- 7. Quelle est la différence entre AppDomain.CurrentDomain.BaseDirectory et Application.ExecutablePath en pratique?
- 8. Quelle est la différence entre « et" en JavaScript?
- 9. En C#, quelle est la différence entre un destructeur et une méthode Finalize dans une classe?
- 10. Quelle est la différence entre les itérateurs en Java et C++?
- 11. quelle est la différence entre:.! et: r !?
- 12. Quelle est la différence entre dict() et {}?
- 13. Quelle est la différence entre le format OMF et COFF?
- 14. Différence entre l'octet et le caractère en C
- 15. Quelle est la différence entre = et: =
- 16. Quelle est la différence entre "someValuesFrom" et "allValuesFrom"?
- 17. Quelle est la différence entre exit() et abort()?
- 18. Quelle est la différence entre le contrôle de flux DTR/DSR et RTS/CTS?
- 19. Quelle est la différence entre les façons de créer une chaîne en C?
- 20. Quelle est la différence entre les méthodes anonymes (C# 2.0) et les expressions lambda (C# 3.0)?
- 21. Quelle est la différence entre l'utilisation d'accesseurs obj-c et l'utilisation de la syntaxe à points?
- 22. Quelle est la différence entre "bool" et "bool?"
- 23. Quelle est la différence entre -ggdb gcc et -g gcc
- 24. Quelle est la différence entre -lcurses et -lncurses lors de la compilation de C en utilisant ncurses lib?
- 25. Quelle est la différence de vitesse entre les langages DLR et C# dans Silverlight 2?
- 26. En Perl, quelle est la différence entre l'utilisation et le besoin de charger un module?
- 27. Quelle est la différence?
- 28. Quelle est la différence entre IContainer et IUnityContainer de Prism?
- 29. Quelle est la différence entre un espace de noms et un module en F #?
- 30. Objective-C: différence entre id et void *
Les flux ne sont pas nécessairement tamponnés; stderr et cerr perdraient beaucoup de fonctionnalités s'ils devaient l'être. L'idée d'un flux est qu'il s'agit d'une séquence d'octets indifférenciés, et la mise en mémoire tampon est plutôt une implémentation ou un système d'exploitation. –
True, les flux d'erreur sont sans tampon. Je vais éditer. – unwind
Je vois votre instruction "Par exemple un appel fread() pour lire 2 octets pourrait lire 1024 octets à partir du fichier, qui pourrait à son tour renvoyer 57 si vous étiez si proche de la fin du fichier." Cela signifie-t-il qu'un fread peut continuer et lire au-delà de l'EoF? – Invictus