gpt4 book ai didi

c++ - select() 系统调用和 bash 转义

转载 作者:太空狗 更新时间:2023-10-29 12:13:11 25 4
gpt4 key购买 nike

当我使用命令 g++ -std=c++11 <filename> 编译并运行以下代码时并运行 ./a.out并输入一些文本以查看 select 调用将返回什么(它应该返回 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 的输入命令

最佳答案

您只检查是否有可从标准输入读取的输入,但您实际上并没有读取它,因此它留在了终端缓冲区中。

关于c++ - select() 系统调用和 bash 转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34507382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com