掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26579

Unix SIGNAL 処理について
投稿者---RingBuffer(2006/04/10 10:07:42)


Fedora 4 + gcc4.1 で開発しているプログラムで
キーボードシグナルをトラップする必要が出てきました。
その内容は、
(1) Ctrl-Cは無視する。
(2) Escをトラップする。
というものですが、SIGINTを無視することは簡単なのですが、
ESCをトラップする簡単な手段としてどのようなものがあるでしょうか?
SIGUSR1でキーボード信号をすべてトラップすることはしたくないので、
最後の方法と思っています。
できれば、ESCをCtrlーCにバインドし、Ctrl-Cを無視できればSIGINTを
そのまま利用できて大変うれしいのですが、そのようなことは
簡単に出来るものでしょうか?

よろしくお願いいたします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:Unix SIGNAL 処理について 26701 かずま 2006/04/24 21:53:00


No.26701

Re:Unix SIGNAL 処理について
投稿者---かずま(2006/04/24 21:53:00)


Ctrl-Z でサスペンドできなくなってもよいのなら、
#include <stdio.h>
#include <signal.h>
#include <termios.h>

void onint(int n)
{
    printf("onint: n=%x\n", n);
}

int main(void)
{
    struct termios t;  int c;

    signal(SIGINT, onint);
    signal(SIGTSTP, onint);
    tcgetattr(0, &t);
    t.c_cc[VSUSP] = 0x1b;
    tcsetattr(0, TCSANOW, &t);

    while ((c = getchar()) != EOF)
        printf("c = %02x\n", c);

    t.c_cc[VINTR] = 0x1a;
    tcsetattr(0, TCSANOW, &t);
    return 0;
}



この投稿にコメントする

削除パスワード

No.26702

Re:Unix SIGNAL 処理について
投稿者---かずま(2006/04/24 22:18:01)


> ESCをトラップする簡単な手段としてどのようなものがあるでしょうか?

先ほどのプログラムは ESC と Ctrl-C をトラップするものです。


> できれば、ESCをCtrlーCにバインドし、Ctrl-Cを無視できればSIGINTを
> そのまま利用できて大変うれしいのですが、そのようなことは
> 簡単に出来るものでしょうか?
SIGINT をそのまま利用したいのなら、signal(SIGINT, onint); を削除し、

    t.c_cc[VINTR] = 0x1b;
    t.c_cc[VSUSP] = 0x03;

元に戻すのは、

    t.c_cc[VINTR] = 0x03;
    t.c_cc[VSUSP] = 0x1a;



この投稿にコメントする

削除パスワード

No.26705

Re:Unix SIGNAL 処理について
投稿者---RingBuffer(2006/04/26 10:34:01)


すばらしい。

半ば諦めており、ダミーの子プロセスにstdinを監視させ
ESCのときSIGCLDを発生させるという姑息な手段で
とりあえず対処しました。
(当方ソースリリースがないことをいいことに見た目のユーザ要求を
満たすという、姑息な手法を取ることが平気な人間です。)

SIGTSTPを使うことも考えたのですが、さすがですね。
勉強になります。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧