プロが教えるわが家の防犯対策術!

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

A 回答 (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);
}
}

この回答への補足

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

補足日時:2006/04/03 09:48
    • good
    • 0

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

    • good
    • 0

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

補足日時:2006/03/06 06:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!