Мне нужно прочитать с помощью fread() материал с конца канала для чтения.
Но хотя я ожидаю, что fread() установит EOF, когда в канале ничего нет, вместо этого он устанавливает индикатор ошибки. Я проверил стандарты posix и C и не нашел там никакой подсказки. Наверное, я делаю что-то непреднамеренное (читай, глупое), да :)
Вот отрывок:
#include <stdio.h>
#include <fcntl.h>
int main()
{
char buf[128];
FILE *f;
int pipe_fd[2], n;
pipe(pipe_fd);
fcntl(pipe_fd[0], F_SETFL, O_NONBLOCK);
f=fdopen(pipe_fd[0], "r");
n=fread(buf, 1, 1, f);
printf("read: %d, Error: %d, EOF: %d\n", n, ferror(f), feof(f));
return 0;
}