• ベストアンサー

UNIXでCtrl+Cを無効にする方法

現在UDPのソケットプログラミングをしています。 それでサーバーの方はずっと無限ループでクライアントを待っている訳なので 普通はCtrl+Cで強制的に止めますよね。 でも、今回はちゃんとメニューから終了を選んで止めるように言われました。 でCtrl+Cは無効にしろ、とも。 でもどうやって無効にするんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

>ここでは2度目の SIGINT に対応するため、再度 signal() を実行してやります。 この処置が必要かどうかはシステム依存です。 Debian kernel 2.6.12-1では不要でした。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include <stdio.h> #include <unistd.h> #include <signal.h> void sigint_handler(int sig) { char buf[BUFSIZ]; fprintf(stderr, "In sigint_handler, catch signal. input <CR>\n"); fgets(buf, BUFSIZ, stdin); } int main() { int i = 0; signal(SIGINT, sigint_handler); while (1) { sleep(1); fprintf(stderr, "In main, count %d\n", ++i); } }

sucker
質問者

補足

お待たせしまして大変申し訳ありません。m(__)m 実は質問後、上の指示で「Ctrl+Cは無効にしなくてもいい」となりました。 それでまだ試していません。すみません。 今は他のプロジェクトがあって不眠不休状態です。 もうしばらく、もうしばらくお待ちいただけないでしょうか? 本当にすみません…。

その他の回答 (2)

回答No.3

signal() より sigaction() の方が細かい設定が出来ていいと思います。

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.1

SIGINTを処理して、無視すればいいです。 signal(SIGINT, sigint_handler); sigint_handler() は SIGINT を処理する自分で作るの関数です。 ここでは2度目の SIGINT に対応するため、再度 signal() を実行してやります。 次のようになります。 int main() { ................... signal(SIGINT, sigint_handler); ................... } void sigint_handler(int sig) { signal(SIGINT, sigint_handler); }

sucker
質問者

補足

自分で試してみますので皆様しばらくお待ち下さい。m(__)m