gpt4 book ai didi

linux - select调用的第一个参数是传入的要监听的fd的最大值加一

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:04 24 4
gpt4 key购买 nike

我想知道为什么select调用的第一个参数是要监听的传入fd的最大值加一。

int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct timeval *timeout);

正如我在一些文章中看到的,如果我让fd_set有8位和fd=5,那么在我执行FD_SET(fd,&fd_set)之后,fd_set变成0001,0000。但是,如果我让 fd=0 并执行 FD_SET,结果是什么?

最佳答案

  1. fd_set是位图,最多只能代表1024个fd,系统每次收到通知都会从0到1023遍历fd_set,参数maxfdp1(nfds)指定上限,限制fd_set的范围,然后系统检查fd_set从0到maxfdps。

    • 引用此example ,检查max_sd是如何迭代的。
  2. 每个进程都有自己打开的文件描述符命名空间(0,1,2 是 stdin, stdout, stderr),FD_SET(0, &fd_set) 将通知进程 stdin 有传入数据。

关于linux - select调用的第一个参数是传入的要监听的fd的最大值加一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49604626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com