2016-09-15 4 views
2

をデフォルトにリセットされます。シグナル処理動作は、私はこのようなコードの部分を持っているはsigaction

void go_to_next_file() { 
    //Increments file_number, opens a new file to write to. 
    file_number += 1; 

    char filename[32]; 
    snprintf(filename, sizeof(char) * 32, "%i.txt", file_number); 

    f = fopen(filename, "w"); 
    //Check if opening a new file was successful. 
    if (f == NULL) 
    { 
    printf("Error opening file!\n"); 
    exit(1); 
    } 
} 

初めてSIGTSTPが発生した後、ハンドラは削除され、デフォルトの動作は休止状態ですored。 ハンドラをsigaction()を通して永続的にインストールするにはどうしたらいいですか?

+0

ハンドラにコードを投稿できますか? – Sadjad

+0

質問を編集しました。 –

答えて

1

シグナルハンドラ内で安全でない関数を呼び出すことは避けてください。シグナルが安全でない関数の実行を中断し、 ハンドラのいずれか(longjmpへの コールを経由して終了し、安全でない機能やハンドラを呼び出す場合

)またはsiglongjmp:それはmanualで述べたように、未定義の動作になり()を呼び出し、プログラムが安全でない関数 を呼び出した場合、プログラムの動作は未定義です。

マニュアルに安全機能のリストが表示されています。あなたの機能のほとんどはリストにありません。最良の方法は、シグナルハンドラ内にvolatileフラグを設定し、メインプログラム実行内のすべてを処理することです。

関連する問題