我有一个控制台程序,我想如果用户按ctrl-z程序退出,如果他按ctrl-c没有任何反应。在Bash中我会设置陷阱,我应该在C ++中使用什么?
答案 0 :(得分:5)
在Unix中使用signal()
中的<signal.h>
来注册接收信号时要调用的函数。
例如:
#include <signal.h>
void leave(int sig);
// ...
{
signal(SIGINT,leave);
for(;;) getchar();
}
// Beware: calling library fn from signal handler isn't std-conforming
// and may not work.
void leave(int sig)
{
exit(sig);
}
答案 1 :(得分:4)
如果您使用的是基于UNIX的系统,那么您需要signal()
或sigaction()
,具体取决于您的偏好和线程模型;就个人而言,我建议sigaction()
超过signal()
。您想要捕获SIGTSTP
和SIGINT
。请阅读the Signal Concepts section of the Single UNIX Specification以获取有关如何使用它们的详细说明。
如果你有空闲时间,请阅读W. Richard Steven的经典Advanced Programming in the UNIX Environment。你永远不会后悔。如果您希望执行更多UNIX系统的编程任务,那么也可以获取POSIX Programmers Guide和POSIX.4 Programmers Guide的副本。它们是很好的介绍和参考。
答案 2 :(得分:2)
对于Ctrl + C,您必须捕获SIGINT信号。 Look here.
答案 3 :(得分:1)
当然,这是特定于平台的。 C ++本身并不了解键盘输入或信号处理。
正如你提到的bash,我猜你是在Linux或某种UN * X上。在这种情况下,请查看signal.h。