- ベストアンサー
UNIXでCtrl+Cを無効にする方法
現在UDPのソケットプログラミングをしています。 それでサーバーの方はずっと無限ループでクライアントを待っている訳なので 普通はCtrl+Cで強制的に止めますよね。 でも、今回はちゃんとメニューから終了を選んで止めるように言われました。 でCtrl+Cは無効にしろ、とも。 でもどうやって無効にするんでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ここでは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); } }
その他の回答 (2)
- noboru2000
- ベストアンサー率33% (47/140)
signal() より sigaction() の方が細かい設定が出来ていいと思います。
- moritan2
- ベストアンサー率25% (168/670)
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); }
補足
自分で試してみますので皆様しばらくお待ち下さい。m(__)m
補足
お待たせしまして大変申し訳ありません。m(__)m 実は質問後、上の指示で「Ctrl+Cは無効にしなくてもいい」となりました。 それでまだ試していません。すみません。 今は他のプロジェクトがあって不眠不休状態です。 もうしばらく、もうしばらくお待ちいただけないでしょうか? 本当にすみません…。