select()语句的问题

时间:2012-08-16 23:48:20

标签: c sockets unix-socket

我有一个程序正在使用select()来轮询准备连接的套接字。

我有另一个程序绑定到套接字并发出send()命令。

我遇到的问题是文件描述符是否适用于两个可执行文件。

即。如果我在程序A中将文件描述符5添加到FD_SET,并且程序B中的套接字fd为5,这是否意味着该套接字上的send()将唤醒程序A,该程序在包含5的FD_SET上进行选择? / p>

由于

3 个答案:

答案 0 :(得分:2)

不,文件描述符编号是特定于进程的。在不同进程中使用相同的fd编号没有隐含的影响。

答案 1 :(得分:0)

它与文件描述符编号无关。

如果通过套接字发送套接字,而该套接字的另一端是正在为读取选择的套接字,则选择器将检测读取事件。

答案 2 :(得分:0)

大多数情况下,1024个描述符(文件/套接字)由给定进程支持(0-1023)(请参阅/ proc // limits中进程支持的文件/套接字描述符的最大限制)。

前3个描述符(0,1和2)分别分配给stdin,stdout和stderr。下一个 值为3的描述符将分配给下一个打开的文件/套接字描述符,并且可以直到/ proc中指定的限制。注意:您还可以更改支持的最大描述符。

您可以在/ proc // fd中看到给定进程打开的文件描述符列表。 每个进程描述符/信号/事件范围仅特定于进程。