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

Dim*_*nek 5 c linux driver linux-kernel

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

rv = read(fd, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

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

它真的有什么作用?

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

返回值的意义是什么?

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

如果rv==0如何区分"无错误"与例如"套接字关闭".

Ser*_* L. 7

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

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

例如,如果关闭文件描述符,则将返回-1errno的返回值EBADF.相反,返回值将是0一切都很好而另一个read不会返回与文件描述符的有效性相关的错误.

随后的read一个真正的缓冲区,nbyte > 0仍然可以生成任何数量的类似错误ENOMEM,EAGAIN...

  • 它似乎从根本上说是不便携的.linux man(3)读取页面说:`允许但不要求实现对零字节的read()请求执行错误检查.POSIX说:在采取任何操作之前,如果nbyte为零,则读取()function*may*检测并返回错误. (5认同)