select()在Bash脚本中不提供超时
select() does not give timeout inside a Bash script
我遇到一个问题,当我在Bash脚本文件中运行程序时,select()不会超时。这是我的实现:
#include <sys/select.h>
bool checkKeyPressed()
{
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
fd_set descriptor;
const int input = 0;
FD_ZERO(&descriptor);
FD_SET(input, &descriptor);
return select(1, &descriptor, NULL, NULL, &tv) > 0;
}
//直接运行程序后的strace结果(纠正有超时)
select(1, [0], NULL, NULL, {1, 0}) = 0 (Timeout)
//strace结果在bash脚本文件中运行应用程序(无超时)
select(1, [0], NULL, NULL, {1, 0}) = 1 (in [0], left {0, 999996})
read(0, "", 1) = 0
如何更改函数以使其同时在Bash脚本下运行?
如果您仔细查看跟踪中的read
调用,您会注意到它返回零,意味着文件结束。
当文件描述符处于EOF(或远程套接字关闭等)时,描述符是可读的,read
返回零。
如果在交互式shell中按CTRL+d,则会得到相同的结果。
如果您只需要1秒的超时,请不要将任何文件描述符传递给select()
。在这种情况下,select()
用作便携式sleep()
功能。
相关文章:
- 如何通过cpp程序运行shell脚本
- 在程序中编写脚本来编写和编译代码
- C++减少modbus_connect超时
- 如何在c++中使用system()来运行包含空格的python脚本
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 没有超时的C++条件变量
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何在C++(VS2010)中设置超时读取USB端口?
- 在原子中使用犰狳与脚本
- C++卷曲柱在curl_easy_perform超时
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- CANoe - 无法在 CAPL 脚本中打开.dll
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 将数组/向量发送到 c++ 脚本的 cython 示例
- 脚本的多重定义::LState
- select()在Bash脚本中不提供超时