使用ctrl-c中的sigint

时间:2010-11-17 03:47:19

标签: c copy-paste sigint

好吧,所以我使用sighandler来解释一些信号,为此目的它是ctrl-c,所以当输入ctrl-c时会采取一些动作,一切都很好,花花公子,但我真的是需要是在没有^ c出现在输入/输出

的情况下发生这种情况 例如,假设我有这个代码

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void siginthandler(int param)
{
  printf("User pressed Ctrl+C\n");
  exit(1);
}

int main()
{
  signal(SIGINT, siginthandler);
  while(1);
  return 0;
}

输出将是

^ CUser按Ctrl + C

我怎么能把这简单地作为

用户按下Ctrl + C?

3 个答案:

答案 0 :(得分:3)

您可以使用curses库的“noecho()”调用来实现此效果 - 但您必须愿意接受(和/或使用)curses终端处理......

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

#include <curses.h>

void siginthandler(int param)
{
  endwin();
  printf("User pressed Ctrl+C\n");
  exit(1);
}

int main()
{
  initscr();
      noecho();
  signal(SIGINT, siginthandler);
  while(1);
  return 0;
}

答案 1 :(得分:1)

这很可能不是你的程序那样做的。它可能是终端驱动程序,在这种情况下,您应该使用sttyctlecho选项查看echoctl

您可以使用stty -a获取终端设备的所有当前设置。对于这些项目的编程接口,termios是可行的方法。

答案 2 :(得分:0)

正如其他人所说,这种事情属于您的终端驱动程序的控制,通常使用curses库完成。也就是说,这是一个可能会让你上路的黑客攻击:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void siginthandler(int param) {
    printf("User pressed Ctrl+C\n");
    system("stty echo");
    exit(1);
}

int main() {
    system("stty -echo");
    signal(SIGINT, siginthandler);
    while(1);
    return 0;
}