read(fd,NULL,0);它有什么作用?它定义明确吗?

时间:2014-04-16 14:29:24

标签: c linux linux-kernel driver

我在一些程序中看到了以下声明,大部分/全部似乎都是针对Linux制作的。

rv = read(fd, NULL, 0);

在某些程序中,它处于一个循环中,在一些语句中。

它真的有什么作用?

手册页说这样的调用可能会也可能不会检查错误......

返回值有什么意义?

支持哪些类型的文件描述符?

如果rv==0如何区分“无错误”,例如“插座关闭”。

1 个答案:

答案 0 :(得分:7)

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

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

例如,如果文件描述符已关闭,则将重新调整-1的{​​{1}}和errno的返回值。如果一切正常,则返回值将为EBADF,而另一个0将不会返回与文件描述符的有效性相关联的错误。

后续read具有真正的缓冲区且read仍然可以生成任意数量的错误,例如nbyte > 0ENOMEM,...