在
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout);
readfds
& writefds
- 他们可以同时使用吗? EX:如果我有一个接一个的读操作和发送操作
此外,任何人都可以提供良好的链接或示例程序吗?
select(...)
仅用于服务器程序吗?或仅在TCP?
答案 0 :(得分:0)
来自manual:
观看三组独立的文件描述符。列出的那些 在readfds中将观察是否可以使用字符 阅读(更确切地说,看看阅读是否会阻止;在...中 特别是,文件描述符也准备在文件结尾),那些在 将观察writefds以查看写入是否会阻塞,以及那些 在exceptfds中将监视异常。退出时,套装是 修改到位以指示实际更改了哪些文件描述符 状态。可以将三个文件描述符集中的每一个指定为 如果没有要查看相应的文件描述符,则为NULL 一类事件。
提供readfds
的小例子:
fd_set set;
FD_SET(0,&set); //stdin
FD_SET(socket,&set); //socket may be your tcp-fd where you wanna read from
while(1) {
select(socket,&set,NULL,NULL,NULL)
FD_ZERO(&set);
FD_SET(0,&set);
FD_SET(socket,&set);
if(FD_ISSET(0,&set))
{
//write the input on the stream
}
if(FD_ISSET(socket,&set))
{
//read any content from the stream
}
}
只需声明一组writefds
,并使用FD_ISSET
检查其状态,它应该 simuntanouesly 。
Select()
可以在任何想要处理多个描述符的地方使用。