好吧,所以我使用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?
答案 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)
这很可能不是你的程序那样做的。它可能是终端驱动程序,在这种情况下,您应该使用stty
或ctlecho
选项查看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;
}