我们的教授在类里面给了我们这段代码:
st = select(max+1, &rs, NULL, NULL, &timeinterval);
if(st){
for(int i=0; i<workers; i++)
{
if(FD_ISSET(channels[i]->read_fd(), &rs))
老实说,我很难理解它在做什么。我试图研究更多关于 pthreads 的信息,但似乎没有任何东西可以解释这是在做什么。他说这与文件描述符有关,但我不明白这段代码是怎么回事。
最佳答案
这个select
的目的是等待多个文件描述符,可能超时,当它返回一个正数时,这意味着至少有一个fd在rs
set 准备好读取,因此在循环中,您检查它是哪个 fd,然后对其执行读取。
请注意,您应该检查是否大于 0,因为如果出现错误将返回 -1,您不应该检查 fd_set 而是处理错误:
if(st > 0) {
for(int i=0; i<workers; i++)
{
if(FD_ISSET(channels[i]->read_fd(), &rs)) {
// perform read on channels[i]->read_fd
}
}
} else if (st == 0) {
// handle time out
} else {
// handle error
}
关于c - pthread和select()函数的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36708309/