パイプの読み取り端からのものを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;
}