“陷阱”控制-d和控制-c

时间:2009-11-01 17:03:45

标签: c++

我有一个控制台程序,我想如果用户按ctrl-z程序退出,如果他按ctrl-c没有任何反应。在Bash中我会设置陷阱,我应该在C ++中使用什么?

4 个答案:

答案 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()。您想要捕获SIGTSTPSIGINT。请阅读the Signal Concepts section of the Single UNIX Specification以获取有关如何使用它们的详细说明。

如果你有空闲时间,请阅读W. Richard Steven的经典Advanced Programming in the UNIX Environment。你永远不会后悔。如果您希望执行更多UNIX系统的编程任务,那么也可以获取POSIX Programmers GuidePOSIX.4 Programmers Guide的副本。它们是很好的介绍和参考。

答案 2 :(得分:2)

对于Ctrl + C,您必须捕获SIGINT信号。 Look here.

答案 3 :(得分:1)

当然,这是特定于平台的。 C ++本身并不了解键盘输入或信号处理。

正如你提到的bash,我猜你是在Linux或某种UN * X上。在这种情况下,请查看signal.h

相关问题