0

我有一个功能:

int waiting()
{
fd_set          input_set;
struct timeval  timeout;
int             ready_for_reading = 0;
int             read_bytes = 0;

FD_ZERO(&input_set );
FD_SET(0, &input_set);

timeout.tv_sec = WAIT;    // WAIT seconds
timeout.tv_usec = 0;    // 0 milliseconds

printf("^[[10;53H^[[1;34;44m   LOGIN TO BBS   ^[[0;37m", WAIT);
printf("^[[11;53H^[[34;46m   apply to bbs   ^[[0;37m", WAIT);
printf("^[[12;53H^[[34;46m    page sysop    ^[[0;37m", WAIT);
printf("^[[13;53H^[[34;46m   logout of bbs  ^[[0;37m", WAIT);
printf("\n", WAIT);

ready_for_reading = select(1, &input_set, NULL, NULL, &timeout);

if (ready_for_reading == -1) {
    return -1;
}
if (ready_for_reading) {

} else {
    exit(1);
}

return 0;
}

它超时,就像它应该的那样,问题是它仅在用户不输入任何内容时才有效。无论用户是否输入任何内容,我都希望它能够正常工作。具体来说,如果用户使用箭头选择其中一个选项,但没有按回车键实际选择它。整个问题是,所以打电话给我的 BBS 的人,如果他们 telnet 到它,并且在菜单上,如果他们不做任何事情,他们就会超时。我遇到的一个问题是,有些人打电话给我的 BBS,然后登录,但实际上什么也没做。它不会像它应该的那样退出。锁定 BBS 上的一个节点。另外,我想在后台运行此功能。那可能吗?

4

1 回答 1

0

好的。我找到了一个完全符合我要求的功能。alarm(). 我设置alarm(15)了放置waiting函数的位置,然后添加了一个alarm(0)我希望它不会超时的位置。

于 2018-10-12T19:42:43.300 回答