我在一些程序中看到了以下声明,大部分/全部似乎都是针对Linux制作的。
rv = read(fd, NULL, 0);
在某些程序中,它处于一个循环中,在一些语句中。
它真的有什么作用?
手册页说这样的调用可能会也可能不会检查错误......
返回值有什么意义?
支持哪些类型的文件描述符?
如果rv==0
如何区分“无错误”,例如“插座关闭”。
答案 0 :(得分:7)
此调用将对文件描述符执行所有常规错误检查,但不会从中检索任何数据。如果您希望确定文件描述符是否仍然有效而不阻塞它,这将非常有用。
如果发生错误,它将返回-1
,否则将返回0
。 man 2 read
中列出的大多数错误都可以通过这种方式查询,并会在errno
中返回。
例如,如果文件描述符已关闭,则将重新调整-1
的{{1}}和errno
的返回值。如果一切正常,则返回值将为EBADF
,而另一个0
将不会返回与文件描述符的有效性相关联的错误。
后续read
具有真正的缓冲区且read
仍然可以生成任意数量的错误,例如nbyte > 0
,ENOMEM
,...