select() 带有 const 超时参数?
select() with const timeout parameter?
select(2)系统调用在Unix Network Programming (2003) by Stevens, Fenner and Rudoff的第6.3章中定义如下:
#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);
但是 none 现代 Unix,例如 FreeBSD、OpenBSD、NetBSD,Linux,甚至 POSIX[1] 标准,都这样定义系统调用。不过书中注明是"POSIX specifies the const qualifier"。是书上的错误吗?或者,是因为历史原因?不过,所有系统都将 pselect(2) 定义为具有恒定的超时参数。
http://pubs.opengroup.org/onlinepubs/009695399/functions/pselect.html
本书勘误表页面没有将此列为错误:
POSIX 定义 select()
的接口
如:
int select(int nfds, fd_set *restrict readfds,
fd_set *restrict writefds, fd_set *restrict errorfds,
struct timeval *restrict timeout);
The select() function shall be equivalent to the pselect() function, except as follows:
- ...
- Upon successful completion, the select() function may modify the object pointed to by the timeout argument.
pselect
函数接受一个 const struct timespec * restrict timeout
参数(POSIX 定义中的同一页)。
书中引用的 const
限定词是错误的。
select(2)系统调用在Unix Network Programming (2003) by Stevens, Fenner and Rudoff的第6.3章中定义如下:
#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);
但是 none 现代 Unix,例如 FreeBSD、OpenBSD、NetBSD,Linux,甚至 POSIX[1] 标准,都这样定义系统调用。不过书中注明是"POSIX specifies the const qualifier"。是书上的错误吗?或者,是因为历史原因?不过,所有系统都将 pselect(2) 定义为具有恒定的超时参数。
http://pubs.opengroup.org/onlinepubs/009695399/functions/pselect.html
本书勘误表页面没有将此列为错误:
POSIX 定义 select()
的接口
如:
int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict errorfds, struct timeval *restrict timeout);
The select() function shall be equivalent to the pselect() function, except as follows:
- ...
- Upon successful completion, the select() function may modify the object pointed to by the timeout argument.
pselect
函数接受一个 const struct timespec * restrict timeout
参数(POSIX 定义中的同一页)。
书中引用的 const
限定词是错误的。