0

シェルでunixhistoryコマンドを実装する割り当てに取り組んでいます。私のプログラムでは、SIGINTのシグナルハンドラーを作成しました。ユーザーが(ctrl)(c)と入力すると、ユーザーの履歴が表示されます。

プログラムが終了したら、履歴をファイルに保存する必要があります。プログラムが終了したことを検出する簡単な方法はありますか?または、すべてのタイプのシグナル((ctrl)(d)、pausebreakなど)に対してシグナルハンドラーが必要ですか?

4

2 に答える 2

5

atexit()おそらくあなたが探しているものです。マニュアルページを参照してください:man 3 atexit

使用法は次のようなものです。

#include <stdlib.h>

static void save_the_file(void)
{
    /* ... */
}

int main()
{
    atexit(save_the_file);
    return 0;
}

別のオプションは、destructor属性(GCC / Clang)を使用することです。

static __attribute__((destructor)) void save_the_file(void)
{
     /* your code */
}
于 2012-11-28T03:24:14.410 に答える
2

atexitはそれです。ただし、SIGKILLもフォローする場合は、waitpid()を呼び出すwatcher-processが必要です。

于 2012-11-28T03:25:41.983 に答える