Fonction fread dans la Programmation en C
J'ai deux questions à propos de C fread
fonction:
-
J'ai lu que
fread
est utilisé pour lire un fichier binaire. Cependant, quand je lis un fichier binaire avecfgets
à l'aide du mode de lecture"r"
et un fichier texte avecfread
à l'aide de"rb"
mode, les résultats sont les mêmes que la lecture d'un fichier texte avecfgets
et un fichier binaire avecfread
. Alors, pourquoi il y a différentes fonctions de lecture des binaires et les fichiers de texte? -
Je suis en utilisant
fread
de lire 10 octets d'un fichier dans un appel. Comment dois-je arrêter de lire à la fin du fichier – à-dire comment estEOF
spécifié dansfread
?
tous les fichiers sont des fichiers binaires, c'est que pour ouvrir qui détermine si le caractère de FIN DE LIGNE doit signifier quelque chose ou pas.
OriginalL'auteur mainajaved | 2011-10-14
Vous devez vous connecter pour publier un commentaire.
répondre à 1 question >
1>fread
Bloc de lecture de données à partir de flux de (essayer de comprendre ce)
Lit un tableau de numération des éléments, chacun avec une taille de size octets, à partir du flux et les stocke dans le bloc de mémoire spécifiée par ptr.
La position de l'indicateur du flux est avancé par le montant total d'octets lus.
Le montant total d'octets lus en cas de succès est (taille * count).
2>fgets
Obtenir de la chaîne de stream (essayer de comprendre ce)
Lit les caractères de flux et la stocke sous forme d'une chaîne C dans str jusqu' (num-1) caractères ont été lus, soit d'un retour à la ligne ou de la Fin de Fichier est atteinte, selon la première éventualité.
Un caractère de saut de ligne fait fgets arrêter la lecture, mais il est considéré comme un caractère valide et par conséquent, il est inclus dans la chaîne copiée à la str.
Un caractère nul est ajouté automatiquement dans str après les personnages de lecture de signal de la fin de la chaîne C.
réponse à la 2ème question
dans fread valeur de retour est
Le nombre total d'éléments de réussir à lire est retourné comme un size_t objet, qui est une partie intégrante de type de données.
Si ce nombre diffère du nombre de paramètre, soit une erreur s'est produite ou la Fin Du Fichier a été atteinte.
Vous pouvez utiliser ferror ou feof pour vérifier si une erreur s'est produite ou la Fin de Fichier a été atteinte.
OriginalL'auteur Jeegar Patel
Quand vous parlez de "r" et "rb" modes (texte et binaire), vous faites probablement référence à fopen. Sur la plupart des systèmes d'exploitation, il ne fait aucune différence si vous ouvrez un fichier en mode binaire ou en mode texte, mais sur certains systèmes d'exploitation, il y a des traductions qui doivent se produire en mode texte qui sont désactivés en mode binaire. Un exemple de ceci est quand fonctionne sous DOS ou Windows, où le caractère de fin de ligne de la conversion en mode texte, mais pas en mode binaire.
C'est une bonne idée de prendre l'habitude d'utiliser "rb" avec
fopen
pour les fichiers binaires, même si elle n'a pas d'effet sur la plupart des plates-formes, il est toujours possible qu'à un certain moment dans l'avenir de votre code pourrait avoir besoin pour s'exécuter sur un système d'exploitation où cette matière.OriginalL'auteur Paul R
Si nous faisons binaire I/O, nous avons souvent aimerais lire ou écrire un
structure à la fois. Pour ce faire, à l'aide de getc ou putc, nous avons d'une boucle sur l'ensemble de la structure, un octet à la fois, de la lecture ou de l'écriture de chaque octet. Nous ne pouvons pas utiliser la ligne-à-un-temps les fonctions, depuis fputs arrête d'écrire quand il frappe un octet nul, et il pourrait y avoir des octets nuls au sein de la structure. De même, fgets ne fonctionne pas droit sur l'entrée si les octets de données sont des valeurs null ou des sauts de ligne, où fread et fwrite est fourni.
OriginalL'auteur theartist33