Я пытаюсь считать двоичные данные в программе 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);
}
read
возвращает количество прочитанных символов. Когда он достигнет конца файла, он не сможет прочитать больше (вообще) и вернет 0, а не EOF.
Вы должны проверить наличие ошибок. В случае некоторых (распространенных) ошибок, которые вы хотите вызвать, прочтите еще раз!
Если read () возвращает -1, вам нужно проверить errno
на предмет кода ошибки. Если значение errno равно EAGAIN
или EINTR
, вы хотите перезапустить вызов read ()
без использования его (неполных) возвращенных значений. (При других ошибках вы, возможно, захотите выйти из программы с соответствующим сообщением об ошибке (из strerror))