■掲示板に戻る■ 1- 最新50あらあら、宿題なのね?
- 1 :お母さん :02/06/16 18:18
- 麻衣の母、美砂子です。
宿題、判らないところがあったら、遠慮しないで聞いてくださいね。
キーワードがわかっていれば、googleで探しましょうね。
http://www.google.co.jp/
- 80 :名無しさん@お腹いっぱい。 :02/07/02 23:57
- >>79
えーと、やりたいことというのは SIGTERM を
受け取ったときに、すぐ死亡するのではなく、
なんらかの処理を行うためにループを抜けたい、
ということ?
自分なら、
sig_atomic_t g_flag = 1;
void signal_handler(int sig)
{
signal(SIGTERM, SIG_IGN);
g_flag = 0;
}
int main(int argc, char **argv)
{
signal(SIGTERM, signal_hander);
:
:
while (g_flag) {
:
:
}
}
とかやって抜ける。
SIG_DFL だと kill 連発されたら後処理でき
ずに死ぬよ?
- 81 :名無しさん@お腹いっぱい。 :02/07/03 01:22
- >>77
ついでに「1から」の定義も聞いとくよろし。
- 82 :名無しさん@お腹いっぱい。 :02/07/03 01:24
- >>79
普通 sigaction。
- 83 :79 :02/07/03 22:49
- >>80
ありがとうございます。
ついでにもひとつ
sig_flag = 1;
void signal_handler ( int sig )
{
signal ( SIGTERM, SIG_IGN );
sig_flag = 0;
}
main(int argc, char *argv[])
{
:
:
if ( sig_flag == 0 ) {
:
:
}
while ( sig_flag == 1 ) {
:
:
}
みたいなことは可能でしか?
- 84 :名無しさん@お腹いっぱい。 :02/07/03 22:58
- >>83
どういう動作を望んでいるのか、ちゃんと
文章で書かないと答えようがないよ…
- 85 :名無しさん@お腹いっぱい。 :02/07/03 23:05
- >>83 ちゃんとvolatile付けとこうね。
- 86 :79 :02/07/03 23:09
- >>84
スイマセン・・・
while ( sig_flag == 1 ) {
signal (SIGTERM, signal_handler );
:
}
↑ってな感じでsignal_handlerに飛ばしたいんす。
>>85
volatileってなんすか??
- 87 :79 :02/07/03 23:11
- 追加で
signal_handler に飛ばしたら
sig_flagが0になって
if文の処理してexitしたいんす。
へぼい説明でスマソ・・・
- 88 :名無しさん@お腹いっぱい。 :02/07/03 23:54
- >>86
http://www.bohyoh.com/CandCPP/C/Library/signal.html
このあたりかな?>signalとvolatile
「静的記憶域期間をもつ変数」って言い回しがあるんだ...
- 89 :79 :02/07/04 00:16
- >>88
アリガトウ
でもわかんねぇっす。
漏れのコーディソグじゃダメなのですか?
- 90 :名無しさん@お腹いっぱい。 :02/07/04 00:42
- 俺もよーわからんけど、
volatile int sig_flag = 1;
って宣言しとけば、sig_flagの値がレジスタ上にある間に
シグナルハンドラに飛んじゃって(レジスタの値に対比されて)、
変更したのに変更されない、って謎状態を回避できる、って話かと。
- 91 :名無しさん@お腹いっぱい。 :02/07/04 01:07
- >>89
> 漏れのコーテ゛ィソク゛じゃタ゛メなのですか?
だめでしょ。>>88 のリンク先ちゃんと読んだ?
まず、これ。
> abort関数またはraise関数の呼出し以外でシグナルが発生し、
> かつ次のいずれかの場合であるならば、その動作は定義されない。
>・シグナル処理ルーチンが、静的記憶域期間をもつ任意のオブジェクトを参照する場合。
> ただし、volatile sig_atomic_t型の静的記憶域期間をもつ変数に値を代入する場合を
> 除く。
あとこれ。
> プログラムは割り込まれたところから実行を再開する。
- 92 :名無しさん@お腹いっぱい。 :02/07/04 03:18
- >>91 は教え上手 & 察し上手。
オレ >>87 見ても 「if の処理?ハア?」としか思えなかったが
>>91 見て疑問が氷解。
- 93 :79 :02/07/04 08:06
- >>91ハカミ
- 94 :名無しさん@お腹いっぱい。 :02/07/04 22:22
- >>82
便乗質問。(宿題じゃないけど)
man見てもsigactionって何に使うのかいまいち分かりません。
単なるsignal()ではダメで、sigaction()でないと出来ない処理とか、
sigaction()の主な用途を教えてください。
- 95 :名無しさん@お腹いっぱい。 :02/07/05 01:49
- 更に便乗で。。
sigset()ってのもあるでしょ?
- 96 :82 :02/07/05 02:24
- >>94
signal は OS によって semantics が違ってウザイ。
BSD だけ使うなら別に問題ないかも。
- 97 :書けませんよ。。。 :停止
- 真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
read.cgi ver5.26+ (01/10/21-)