select
/ pselect
[1]的手册页以及本LWN文章[2]明确提到对库函数pselect
的调用不会修改超时参数,而可能会select
调用,具体取决于实施情况。 LWN文章提到系统调用pselect
确实修改了超时,库函数将其隐藏在调用者之外。
为什么指定库方法pselect
不修改超时参数?知道定时方法是否有时间返回似乎是一个有用的功能。
例如,我想等待一些时间规则来接收X字节。我可以实现一个循环,调用pselect
来等待数据,累积任何数据读取,累积等待的时间,然后根据是否读取了足够的字节或已经过了足够的时间来决定是否再次循环。由于pselect
不会使用剩余时间修改超时参数,因此我必须调用gettimeofday
来计算剩余时间窗口。