tomyamaのブログ

日記・雑記。

C言語 pause() シグナルを待つ

C言語の「pause()関数」のサンプルプログラムです。

 

 

 

  • pause() シグナルを待つ
    • 準拠 SVr4, 4.3BSD, POSIX.1-2001.
    • #include <unistd.h>
    •  int pause (void) ;
    • 呼び出したプロセス(またはスレッド)を、シグナルを受け取り、終了させられるか、シグナル捕獲関数が呼び出されるまでスリープさせる。

 

[pause.c]

#include <stdio.h>
#include <unistd.h>         /* pause() */
#include <errno.h>          /* errno */
#include <string.h>         /* strerror() */
#include <signal.h>         /* signal() */


/*+++++++[ 変数型定義 ]+++++++++++++++++++++++++++++++++++*/
/*+++++++[ 構造体定義 ]+++++++++++++++++++++++++++++++++++*/
/*+++++++[ 関数プロトタイプ ]+++++++++++++++++++++++++++++*/

void sighdl_int( int signum );


/*+++++++[ 変数定義 ]+++++++++++++++++++++++++++++++++++++*/
/*+++++++[ 関数定義 ]+++++++++++++++++++++++++++++++++++++*/

/*************************************************
 * プログラムのエントリポイント
 *************************************************/

int main( int argc, char *argv[] )
{

    /* SIGINTシグナルを受信した時の動作を変更する */
    if( signal( SIGINT, sighdl_int ) == SIG_ERR ){
        fprintf( stderr, "%s: error: signal(): <%d>%s\n",
            __FUNCTION__, errno, strerror( errno ) );
        return errno;
    }

    /* シグナルを待つ */
    puts( "[Ctrl+C]を待つ…" );
    pause();

    /* Ctrl+C で割り込む */

    printf( "[%s] end !!!\n", argv[0] );    /* 出力される */

    return 0;
}


/*************************************************
 * シグナルハンドラ << SIGINT >>
 *************************************************/

void sighdl_int( int signum )
{
    printf( "%s: normal end\n", __FUNCTION__ );
    return;
}

 

 

実行

$ ./pause.exe
[Ctrl+C]を待つ…
^C
sighdl_int: normal end
[./pause] end !!!

$