используя read () для чтения по одному символу за раз из файла - PullRequest
0 голосов
/ 02 мая 2018

Я хотел бы иметь возможность читать из файла по одному символу за раз, используя read. Я не могу использовать fgetc. Я пытался искать EOF, и я не могу заставить его работать. Спасибо за вашу помощь.

char data[1024];
int infile = open(inFileName, O_RDONLY);
if(infile < 0 ) return 1;

int *c = '\0';
int i = 0;
for(i =0; i<30;++i){
   read(infile, &c, 1);
   printf("%c\n", c);
   if(c == EOF){
       break;
     }
}

1 Ответ

0 голосов
/ 02 мая 2018

read не возвращает EOF, если больше нет ввода. read обычно возвращает количество прочитанных байтов. Поскольку вы собираетесь читать только один байт, вы ожидаете, что read вернет 1. Когда он возвращает 0, это означает, что он достиг конца. Если он возвращает -1, это означает, что он обнаружил ошибку, и вы должны проверить errno для получения дополнительной информации.

У вашей программы другие проблемы. Вы используете int *c совершенно неправильно. Поскольку data уже определен, вы можете использовать его для чтения файла, даже если вы намерены использовать только первый байт буфера. Вы должны проверить, был ли ввод получен на самом деле, прежде чем пытаться его распечатать.

char data[1024];
int infile = open(inFileName, O_RDONLY);
if(infile < 0 ) {
    perror(inFileName);
    return 1;
}

int i = 0;
for(i =0; i<30;++i){
   int r = read(infile, data, 1);
   if(r <= 0){
       if (r < 0) perror("read");
       break;
     }
   printf("%c\n", data[0]);
}
...