我有一个 C 代码,可以向卡发送请求,然后存储卡的响应并打印它。 为了存储我使用的返回命令:
char * returnCommand = Cmd_Debug_GetResponse();
没问题。 我的问题是当我想对此响应设置超时时。如果函数“Cmd_Debug_GetResponse()”在 5 秒内没有返回任何内容,我希望程序继续执行下一行。
我尝试以这种方式使用select(),但没有好的结果: (我只写了有趣的部分)
fd_set input_set;
struct timeval timeout;
int ready_for_reading = 0;
FD_ZERO(&input_set);
FD_SET(0, &input_set);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
ready_for_reading = select(1, &input_set, NULL, NULL, &timeout);
if(ready_for_reading)
{
char * returnCommand = Cmd_Debug_GetResponse();
printf("OK : %s\n", returnCommand);
} else {
printf("5 secs are over\n");
}
代码总是在超时时循环... 有人可以告诉我出了什么问题以及该怎么办吗?
谢谢
select()
函数允许程序监视多个文件描述符,等待一个或多个文件描述符为某一类 I/O 操作(例如,可能的输入)“准备好”。在您的代码中,没有打开文件描述符。你使用了错误的功能和目的
要解决您的问题,您可以使用计时器。请参阅该链接: http://man7.org/linux/man-pages/man2/timer_create.2.html