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

それはおそらくあなたのプログラムがそれをしているわけではありません。ターミナル ドライバである可能性が高く、その場合sttyctlechoまたはechoctlオプションを調べる必要があります。

を使用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 に答える