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 !!!$