2009-03-18 5 views

Répondre

9

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.

5

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.

+1

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. –

+0

True, les flux d'erreur sont sans tampon. Je vais éditer. – unwind

+0

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

2

Les deux sont des interfaces différentes pour le sous-système d'E/S du système d'exploitation.

+0

que voulez-vous dire par "entité système"? –

+0

Je voulais dire sous-système d'entrée/sortie du système d'exploitation. – bayda

+0

J'ai édité la réponse, merci. – bayda

-1

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.

1

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.
3

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++.)
0

comparer le flux de fichiers entre C et Java

Questions connexes