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]);
}