シェルでunixhistoryコマンドを実装する割り当てに取り組んでいます。私のプログラムでは、SIGINTのシグナルハンドラーを作成しました。ユーザーが(ctrl)(c)と入力すると、ユーザーの履歴が表示されます。
プログラムが終了したら、履歴をファイルに保存する必要があります。プログラムが終了したことを検出する簡単な方法はありますか?または、すべてのタイプのシグナル((ctrl)(d)、pausebreakなど)に対してシグナルハンドラーが必要ですか?
シェルでunixhistoryコマンドを実装する割り当てに取り組んでいます。私のプログラムでは、SIGINTのシグナルハンドラーを作成しました。ユーザーが(ctrl)(c)と入力すると、ユーザーの履歴が表示されます。
プログラムが終了したら、履歴をファイルに保存する必要があります。プログラムが終了したことを検出する簡単な方法はありますか?または、すべてのタイプのシグナル((ctrl)(d)、pausebreakなど)に対してシグナルハンドラーが必要ですか?
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 */
}
atexitはそれです。ただし、SIGKILLもフォローする場合は、waitpid()を呼び出すwatcher-processが必要です。