c - pthread和select()函数的作用是什么?

标签 c linux unix select pthreads

我们的教授在类里面给了我们这段代码:

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/

相关文章:

在 module_init 函数中调用schedule,它永远不会返回

命令提示符强行关闭

c - 打印一个数字的英文单词的程序

regex - 使用sed删除特定字符之间的字符

java - Java 中 C 的 "static"关键字等同于什么?

python - 使用什么部署框架?

linux - 将 VPS 设置为流媒体复制器(用于在线广播)?

linux - 使用 gzip 压缩文件以使用 aws 命令传输

c - 将字符串写入管道

java - 用于从时间戳到标准日期格式的日期转换的Unix命令?