タグ

ブックマーク / www.jpcert.or.jp (1)

  • SIG33-C. raise() 関数を再帰的に呼び出さない

    C99 では raise() 関数を再帰的に呼び出すことは認められていない。C99 のセクション7.14.1.1#4 [ISO/IEC 9899:1999] は以下のように規定している。 シグナルが、abort 関数又は raise 関数の呼出しの結果として発生する場合、シグナル処理ルーチンは、raise 関数を呼び出してはならない。 違反コード 以下のコード例では、handler() 関数を使って SIGINT に対応する処理を実行し、次に SIGUSR1 を発生させ割り込みのログを記録する。しかし、raise() 関数を再帰的に呼び出しており、未定義の動作となる。 #include <signal.h> void log_msg(int signum) { /* async-safe なエラー記録ルーチン */ } void handler(int signum) { /* SIGIN

    SIG33-C. raise() 関数を再帰的に呼び出さない
    fujiyoshisyouta
    fujiyoshisyouta 2009/09/01
    そりゃそうだわな。
  • 1