为什么在Linux中使用select
我正在查看一个串行程序,观察到它们在使用select()
之前先使用过read()
。为什么这是必需的。为什么我们不能直接致电read()
并检查是否失败?另外,为什么要在我已经将文件描述符设置为传递时将文件描述符增加1并传递它select()
呢?
例:
r=select(fd+1, &fds, NULL, NULL, &timeout);
fds已经具有fd的值
回答:
该select()
系统调用告诉你是否有任何数据的文件描述符你感兴趣的。严格来说,它是文件描述符的读操作是否会阻止或不是一个问题读取。
如果您read()
在文件描述符(例如连接到串行端口的文件描述符)上执行,并且没有要读取的数据,则该调用将挂起,直到有一些数据要读取为止。使用的程序select()
不希望那样被阻止。
您还问:
为什么在我已经将文件描述符设置为的同时,我们必须将文件描述符增加1并传递它
select
呢?
这可能是指定FD_SET的大小。的第一个参数select()
称为 nfds
,POSIX说:
该
nfds
参数指定要测试的描述符的范围。nfds
在每个集合中应检查第一个描述符;也就是说,nfds-1
应检查描述符集中从零到零的描述符。
因此,要测试文件描述符n
,in中的值nfds
必须至少为n+1
。
以上是 为什么在Linux中使用select 的全部内容, 来源链接: utcz.com/qa/422604.html