我正在编写一个简单的服务器,使用 select 来监视多个病床。
这是我的代码:
while (1) { /* Main server loop - forever */
build_select_list();
timeout.tv_sec = 1;
timeout.tv_usec = 0;
readsocks = select(maxSock+1, &socks, (fd_set *) 0, (fd_set *) 0, &timeout);
if (readsocks < 0) {
perror("select");
exit(EXIT_FAILURE);
}
if (readsocks == 0) {
printf(".");
fflush(stdout);
} else
read_socks();
}
我知道 select 会检测它正在监视的套接字中的变化并“报告”它。我可以使用 select 检测用户的键盘输入(对于退出等命令)吗?如果没有,我该怎么做?
您可以使用
STDIN_FILENO
(来自 unistd.h),或使用 fileno(stdin)
(来自 stdio.h),获取控制台输入的文件描述符。将其添加到您的“读取”fdset 中,select
将“做正确的事情”,指示何时有可用的控制台输入。从那里,就像任何其他文件描述符一样从中读取。