read(2)
не возвращается EOF
.Его возвращаемые значения: 0 при достижении «конца файла», -1 при ошибке, положительное значение, когда прочитано столько байтов.Кроме того, вы проверяете данные для EOF.Ваше условие цикла неверно.
Как правило, вы также проверяете, было ли read(2)
прервано, и если да, повторите попытку.
size_t i = 0;
errno = 0;
while (i < sizeof buf && read (fd, &buf[i], 1) >= 0 && errno != EINTR) {
i++;
errno = 0;
}
Я также не знаю, почему вы читаете только одинбайт за раз, что не очень эффективно.Вы всегда можете прочитать порции данных и проверить возвращаемое значение, чтобы узнать количество прочитанных байтов.
Примечание. Обычно макрос EOF
также определяется значением -1.Так что может показаться, read(2)
возвращает EOF, но не смущайтесь.