Signal ― 2006年09月29日 10時28分49秒
ごく単純なシグナルハンドラ。シグナルを受けたのを表示したかっただけだが、折角なので捻りも加えて。
% cat signal.c
#include
#include
static volatile long long i;
void handler(int sig)
{
fprintf(stderr, "signal %d -> %lld\n", sig, i);
}
int main()
{
signal(SIGINT, handler); /* ctrl-C */
while(1) i++;
}
% make signal
cc -O2 -fno-strict-aliasing -pipe signal.c -o signal
% ./signal
^Csignal 2 -> 225502701
^Csignal 2 -> 304306455
^Csignal 2 -> 374875222
^Csignal 2 -> 554400324
Terminated
Ctrl-C のシグナルで、広域変数 i の値を表示。初期設定のシグナルハンドラとは違い、プログラムを終了しないので、他から kill を使って強制終了させる必要がある。
% sed -i "" -e 's/volatile//' signal.c
% make signal
cc -O2 -fno-strict-aliasing -pipe signal.c -o signal
% ./signal
^Csignal 2 -> 0
^Csignal 2 -> 0
^Csignal 2 -> 0
^Csignal 2 -> 0
Terminated
volatile を取ると、この様な結果になる。なぜだか分からなければ、法政大学奥山研究室 17.2. volatile で復習。
最近のコメント