シグナルハンドラから戻ってきていない?
先日書いた、setjmpとlongjmpに関してエキスパート C プログラミングにシグナルハンドラから復帰するプログラムがあったのでMinGWにて記載してみました。
#include
#include
#include
jmp_buf buf;
void handler( int s )
{
if( s == SIGINT ) {
printf( "now got a SIGINT signal\n" );
}
longjmp( buf, 1 );
}
int main()
{
signal( SIGINT, handler );
if( printf( "%d\n", setjmp(buf)) ){
printf( "back in main\n" );
}else{
printf( "first time through\n" );
}
while(1){
}
}
結果は下記のとおりになりました。
0
back in main
now got a SIGINT signal
しかし、エキスパート C プログラミングには下記のように書かれていました。
back in main
now got a SIGINT signal
back in main
本と別の内容になったので、if( printf( "%d\n", setjmp(buf)) ){ にprintf文を書いて
実際に戻ってきているのかを確認しましたが戻ってきていないようですね。
仕様が変わったのかMinGWのために動作が違うのか…UNIX環境でシグナルハンドラから復帰してくると書かれているので、UNIX環境を整えて確認しないと駄目かもしれませんね
以上、備忘録のための記録でした。