我有以下问题。我想在 Linux 终端中执行某些操作,直到调用组合键 CTRL+D。我找到了一个适用于 Windows 的 C++ 库函数可以做到这一点,但对于 Linux 来说没有简单的解决方案。代码骨架将是这样的:
while(!invoked){ //Until CTRL+D is pressed
//Do something
}
//Continue when CTRL+D is invoked
这可能吗?
这会在插入组合“CRTL + D”时中断循环:
while ((c = getchar()) != EOF)
Linux 中的 NoteCRTL-D
代表 EOF。它相当于CTRL-Z
在windows中。
最简单的等待方法Ctrl+D
是从流中读取std::cin
,然后EOF
在流中检查。问题是:这个调用会阻塞。所以这样做应该发生在其他一些线程中。然后,您必须从服务员向该工作线程发出信号(例如通过条件变量)...
使用(n)curses 库中的getch。正如 zaufi 已经解释的那样,EOF
从标准输入读取时检查,例如getchar
,就像检查Ctrl-D
,但它是一个阻塞操作。getch
是非阻塞的(在nodelay
模式下),因此更适合诸如游戏之类的东西。