Как использовать чтение () для чтения данных до конца файла?

Я пытаюсь считать двоичные данные в программе C с чтением (), но тест EOF не работает. Вместо этого это продолжает управлять навсегда чтением последнего бита файла.

#include <stdio.h>
#include <fcntl.h>
int main() {

  // writing binary numbers to a file
  int fd = open("afile", O_WRONLY | O_CREAT, 0644);
  int i;
  for (i = 0; i < 10; i++) {
    write(fd, &i, sizeof(int));
  }
  close(fd);

  //trying to read them until EOF
  fd = open("afile", O_RDONLY, 0);
  while (read(fd, &i, sizeof(int)) != EOF) {
    printf("%d", i);
  }
  close(fd);
}
10
задан Ciro Santilli 新疆改造中心法轮功六四事件 24 May 2017 в 06:58
поделиться

2 ответа

read возвращает количество прочитанных символов. Когда он достигнет конца файла, он не сможет прочитать больше (вообще) и вернет 0, а не EOF.

20
ответ дан 3 December 2019 в 17:19
поделиться

Вы должны проверить наличие ошибок. В случае некоторых (распространенных) ошибок, которые вы хотите вызвать, прочтите еще раз!

Если read () возвращает -1, вам нужно проверить errno на предмет кода ошибки. Если значение errno равно EAGAIN или EINTR , вы хотите перезапустить вызов read () без использования его (неполных) возвращенных значений. (При других ошибках вы, возможно, захотите выйти из программы с соответствующим сообщением об ошибке (из strerror))

Пример: оболочка с именем xread () из исходного кода git

3
ответ дан 3 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: