Je travaille sur un fichier de données contenant un nombre fixe de caractères suivi d'un deux-points et d'un nombre. Tous les quatre premiers caractères peuvent être quelque chose de tous les nulls à tous (char) 255s.C lire un fichier avec null
Cependant, en essayant de le lire, je vais avoir du mal à déterminer l'EOF.
Si j'utilise comme celui posix read(2)
donc:
ssize_t letters_read = read(fd, buf, 4);
Ensuite letters_read est réglé sur 0. La page de manuel dit que cela signifie que je suis arrivé à un EOF; Cependant, ce n'est tout simplement pas vrai.
Si je fread(3)
d'une manière similaire, je reçois toujours zéro comme une valeur de retour. Même lors de l'envoi du fichier à feof(3)
, il est dit que je suis à la fin du fichier.
Maintenant, si j'ignore simplement les valeurs de retour, je suis en mesure de continuer à lire le fichier et obtenir d'autres résultats.
Comment pourrais-je être capable de lire les quatre valeurs nulles et toujours être en mesure de savoir quand je suis arrivé à un EOF?
Un petit extrait du fichier ressemble à ceci:
4 (null)(null)(null)(null):4 (null)(null)(null)(null):40 (null)(null)(null)(null):402 Af*8:3004
MISE À JOUR
Selon la demande, voici comment je vais sur la collecte des données:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
void process_characters(char *data);
int main(int argc, char *argv[])
{
char *input_file = argv[1];
int opt = 0;
int input_fd = open(input_file, O_RDONLY);
FILE *temp_fd = fopen(input_file, "r");
unsigned long character_size = 0;
fscanf(temp_fd, "%l", character_size);
char data[character_size];
//gobble up the first line
do
{
read(input_fd, data, 1);
printf("%i\n", data[0]);
} while(data[0] != '\n');
size_t characters_read = 0;
characters_read = read(input_fd, data, character_size);
//while(feof(temp_fd) != 0)
while(characters_read != 0)
{
//fread(data, sizeof(char), character_size, temp_fd);
process_characters(data);
///gobble up the garbage
do
{
read(input_fd, data, 1);
printf("%i\n", data[0]);
}while(data[0] != 10);
characters_read = read(input_fd, data, character_size);
}
fclose(temp_fd);
close(input_fd);
return EXIT_SUCCESS;
}
Si vous obtenez zéro à partir de la lecture, il n'y a plus de données à lire. Comment avez-vous ouvert le fichier? Il se peut que vous ayez zappé le fichier ou qu'il soit positionné à la fin. S'il vous plaît fournir un MCVE ([MCVE]). –
Veuillez poster un [mcve]. Certaines des conclusions que vous avez soutenues sont soit un contexte incorrect, soit un contexte manquant. – kaylum
Comment est le fichier ouvert? L'affichage d'un code minimal complet serait utile. – chux