6

好吧,所以我正在使用 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 pressed Ctrl+C

我怎么能简单地做到这一点

User pressed Ctrl+C?

4

3 回答 3

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;
}
于 2010-11-17T04:08:00.303 回答
1

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

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

于 2010-11-17T04:03:29.810 回答
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;
}
于 2010-11-17T04:21:04.027 回答