select(2)系统调用在Stevens,Fenner和Rudoff的Unix网络编程(2003)第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);
但现代Unix(如FreeBSD,OpenBSD,NetBSD,Linux,甚至POSIX [1]标准)都没有定义系统调用。但是,在书中注意到&#34; POSIX指定了const限定符&#34;。这本书中的错误是什么?或者,是因为历史原因?但是,所有系统都将pselect(2)定义为具有常量超时参数。
http://pubs.opengroup.org/onlinepubs/009695399/functions/pselect.html
本书勘误表页面未将此列为错误:
答案 0 :(得分:0)
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()函数可能会修改超时参数指向的对象。
pselect
函数采用const struct timespec * restrict timeout
参数(POSIX定义中的相同页面)。
本书引用的const
限定词是错误的。