当我使用命令g++ -std=c++11 <filename>
编译并运行以下代码并使用./a.out
运行并输入一些文本以查看选择调用将返回的内容(它应该返回1,因为当我输入文本时,然后可以读入文本)。我输入的文本以某种方式转义为bash命令本身。有人能解释为什么会这样吗?
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int input_timeout (int filedes, unsigned int seconds) {
fd_set set;
struct timeval timeout;
// Initialize the file descriptor set.
FD_ZERO (&set);
FD_SET (filedes, &set);
// Initialize the timeout data structure.
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
// select returns 0 if timeout, 1 if input available, -1 if error.
return select (FD_SETSIZE,
&set, NULL, NULL,
&timeout);
}
int main () {
fprintf (stderr, "select returned %d.\n", input_timeout (STDIN_FILENO, 1));
return 0;
}
上面我所说的一个例子是在
下面的输出中bash-3.2 $ ./a.out
what
select returned 1.
bash-3.2$ what
然后无限期地等待what
命令的输入
答案 0 :(得分:2)
您只检查是否有可用于从标准输入读取的输入,但您实际上没有读取它,因此它会留在终端缓冲区中。