41 votes

Pouvons-nous écrire un caractère EOF nous-mêmes?

La plupart des langages tels que le C++ lors de l'écriture dans un fichier, mettez un caractère EOF même si nous manquons d'écrire des énoncés comme :

filestream.fermer

Cependant est-il de toute manière, nous pouvons mettre le caractère EOF en fonction de nos besoins, en C++, pour une instance. Ou toute autre méthode, on peut utiliser en dehors de l'utilisation des fonctions en C++.

Si vous avez besoin de demander plus de renseignements veuillez faire donner un commentaire.

Merci à l'avance.

EDIT: Merci pour votre soutien mais ici, c'est un ajout à cette question:

Si, nous voulons le truc de l'OS et à l'endroit un caractère EOF dans un fichier et écrire des données après les expressions du FOLKLORE ainsi que d'une application comme notepad.exe n'est pas en mesure de lire après notre caractère EOF. J'ai lu les réponses à la question portant sur ce sujet et ont appris à connaître que de nos jours OS, généralement, ne pas voir le caractère EOF plutôt vérifier la longueur du fichier pour obtenir la bonne idée de connaître la longueur du fichier, mais, il doit y avoir une procédure en OS qui serait la vérification de la longueur du fichier, puis la mise à jour des enregistrements d'un fichier.

Je suis désolé si je me trompe en tout point à mon avis mais svp aider moi coz il peut conduire à beaucoup de nouvelles idées.

Merci.

56voto

ypnos Points 21940

Il n'y a pas de caractère EOF. EOF, par définition, "une inégalité de tout caractère valide code". Souvent, il est -1. Il n'est pas écrit dans le fichier à tout moment.

Il y a un historique caractère EOF valeur (CTRL+Z) dans le DOS, mais il est obsolète de nos jours.

Pour répondre à la question de suivi de Apoorv: Le système d'exploitation n'utilise jamais le fichier de données pour déterminer la longueur du fichier (fichiers ne sont pas 'null', en quelque sorte). Si vous ne pouvez pas le truc de l'OS. Peut-être de vieux, stupide programmes ne seront pas lire après un CTRL+Z personnage. Je ne voudrais pas présumer que toute application Windows (même le bloc-notes) le ferait. Je pense qu'il serait plus facile de les tromper avec une valeur null (\0) de caractère.

16voto

B.Gen.Jack.O.Neill Points 2472

Eh bien, EOF est juste une valeur retournée par la fonction définie dans le C stdio.h fichier d'en-tête. Sa en fait le retour à toutes les fonctions de lecture par l'OS, donc sa dépend du système. Lors de l'OS atteint la fin du fichier, il envoie à la fonction, qui à son retour de valeur que les endroits les plus couramment (-1), mais pas toujours. Donc, pour résumer, EOF n'est pas de caractère, mais constante renvoyée par le système d'exploitation. EDIT: eh Bien, vous avez besoin d'en savoir plus à propos de système de fichiers, regardez ce.

Salut, pour ta deuxième question:

encore une fois, vous devriez regarder mieux, en filesystems. La GRAISSE est en très bon exemple, parce que vous pouvez trouver de nombreux articles sur le sujet, et ses principes sont très similaires pour NTFS. De toute façon, une fois de plus, EOF est - NOT a character. Vous ne pouvez pas le placer dans le fichier directement. Si vous pouviez le faire, d'en imaginer les conséquences, même "bête" fichier d'image ne peut pas être lu par le système.

Pourquoi? Parce que l'OS fonctionne comme structure très complexe de couches. Celui de la couche est le système de fichiers du pilote. Il permet de s'assurer que les transferts de données à partir des systèmes de fichiers connus pour le pilote. Il fournit un pont entre les applications et le actuall système de stockage de fichiers dans le disque dur.

Pour être exact, le système de fichiers FAT utilise ce qu'on appelle la GRAISSE de la table - c'est une table située près du début du disque dur (ou partition) adresse de l'espace, et il contient la carte de tous les clusters (peu de cellules de stockage). OK, alors maintenant, lorsque vous souhaitez enregistrer un fichier sur le disque dur, OS (système de fichiers du pilote) regarde dans la GRAISSE de la table, et recherche de la valeur "0x0". Cette "0x0" valeur dit à l'OS qui cluster dont l'adresse est décrit par l'emplacement de cette valeur dans la table FAT est libre d'écrire.

Ainsi il écrit dans la première partie du fichier. Que, il cherche une autre "0x0" valeur en GRAS, et le cas échéant, de l'écriture de la deuxième partie du fichier en cluster qui il souligne. Que, il modifie la valeur de la première GRAS enregistrement de la table où se trouve le fichier à l'adresse physique de la prochaine dans notre cas, la deuxième partie du fichier.

Lorsque votre fichier est stocké sur le disque dur, maintenant vient la partie finale, il écrit souhaité EOF valeur, mais dans la GRAISSE de la table, pas dans le "cadre" du disque dur. Ainsi, lorsque le fichier est lu à la prochaine fois, il sait que c'est la fin, ne pas chercher plus loin.

Alors, maintenant, à vous de voir, si vous voulez écrire manuellement les expressions du FOLKLORE en valeur la place qu'il doesent appartiennent, vous devez écrire votre propre pilote qui serait en mesure de réécrire la GRAISSE, mais c'est pratiquement impossible à faire pour les débutants.

13voto

chbrown Points 1517

Je suis venu ici en passant par les exercices Kernighan & Ritchie C.

Ctrl + D envoie le caractère qui correspond au EOF constant de stdio.h .

7voto

Amardeep Points 10417

En fait, en C++ il n'y a pas de caractère EOF écrit dans un fichier en utilisant soit les fonctions fprintf() ou ostream mécanismes. EOF est une condition d'e/S pour indiquer que plus de données à lire.

Certains de ses premiers disques, les systèmes d'exploitation CP/M à fait utiliser un physique 0x1A (ASCII SOUS le caractère) pour indiquer EOF car le système de fichiers seulement maintenu la taille du fichier en blocs de sorte que vous ne savait jamais exactement combien de temps un fichier en octets. Avec l'avènement de stockage réelle de la longueur qui compte dans le répertoire, il est plus typique pour stocker les "expressions du FOLKLORE" de caractère dans le cadre de l '"in-band" fichier de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X