C语言 select() 与 const 超时参数



select(2) 系统调用在 Unix 网络编程 (2003) 的 6.3 章中定义如下,作者是 Stevens, Fenner 和 Rudoff:

#include <sys/select.h>
#include <sys/time.h>
int select(int maxfdp1, fd_set *readset, fd_set *writeset,
        fd_set *exceptset, const struct timeval *timeout);

但是,像FreeBSD,OpenBSD,NetBSD,Linux甚至POSIX[1]标准这样的现代Unix都没有定义系统调用。但是,书中指出"POSIX指定了常量限定符"。是书中的错误吗?还是因为历史原因?但是,所有系统都定义 pselect(2) 具有一个常量超时参数。

http://pubs.opengroup.org/onlinepubs/009695399/functions/pselect.html

书籍勘误表页面未将此列为错误:

http://www.unixnetworkprogramming.com/errata.html

POSIX 定义了要select()的接口如:

int select(int nfds, fd_set *restrict readfds,
       fd_set *restrict writefds, fd_set *restrict errorfds,
       struct timeval *restrict timeout);

select() 函数应等效于 pselect() 函数,但以下情况除外:

  • 成功完成后,select() 函数可以修改 timeout 参数指向的对象。

pselect函数采用const struct timespec * restrict timeout参数(POSIX 定义中的同一页)。

书中引用的const限定词是一个错误。

相关内容

  • 没有找到相关文章

最新更新