读(fd,NULL,0); 它有什么作用? 它是明确的吗?

我在几个程序中看到了下面的说法,大部分/全部似乎都是针对Linux的。

rv = read(fd, NULL, 0); 

在一些程序中,它是在一个循环中,在一个单一的声明。

它究竟做了什么?

手册页说,像这样的调用可能会或可能不会检查错误…

回报价值的意义是什么?

什么types的文件描述符被支持?

如果rv==0如何区分“没有错误”从例如“套接字closures”。

Solutions Collecting From Web of "读(fd,NULL,0); 它有什么作用? 它是明确的吗?"

这个调用将对文件描述符执行所有常见的错误检查,但不从中检索任何数据。 如果您希望例如确定文件描述符是否仍然有效而不阻塞,那么这非常有用。

如果发生错误,它将返回-1 ,否则返回0man 2 read列出的大多数错误都可以用这种方式查询,并将以errno形式返回。

例如,如果文件描述符关闭,返回值-1errnoEBADF将被重新调用。 如果一切正常,返回值将为0 ,而另一次read不会返回与文件描述符的有效性相关的错误。

随后read一个真正的缓冲区和nbyte > 0仍然可以生成任何数量的错误,如ENOMEMEAGAIN ,…