我需要用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;
}
Run Code Online (Sandbox Code Playgroud)
由于您使用的是非阻塞管道,我相信您会得到:
errno==EAGAIN
当那里根本没有任何东西可以阅读时(现在没有任何意义,但可能是以后的东西 - 稍后再尝试(e)).EOF
当管道的写入侧关闭时(意味着不再有数据出现).有关在read()
设置O_NONBLOCK模式时read()的行为,请参见联机帮助页. fread()
行为应与read()一致.