我正在做一個任務,我正在shell中實現unix歷史命令。在我的程序中,我爲SIGINT寫了一個信號處理程序。當用戶進入(ctrl)(c)他們的歷史被顯示。如何在我的c程序退出時創建文件?
當我的程序終止時,我需要將歷史記錄存儲在一個文件中。有一種簡單的方法來檢測我的程序何時退出?或者我需要爲每種類型的信號((ctrl)(d),暫停等)設置一個信號處理程序。
我正在做一個任務,我正在shell中實現unix歷史命令。在我的程序中,我爲SIGINT寫了一個信號處理程序。當用戶進入(ctrl)(c)他們的歷史被顯示。如何在我的c程序退出時創建文件?
當我的程序終止時,我需要將歷史記錄存儲在一個文件中。有一種簡單的方法來檢測我的程序何時退出?或者我需要爲每種類型的信號((ctrl)(d),暫停等)設置一個信號處理程序。
atexit()
可能是你要找的內容,請參見手冊頁:man 3 atexit
用法是一樣的東西:
#include <stdlib.h>
static void save_the_file(void)
{
/* ... */
}
int main()
{
atexit(save_the_file);
return 0;
}
另一種選擇是使用destructor
屬性(GCC /鏘):
static __attribute__((destructor)) void save_the_file(void)
{
/* your code */
}
謝謝,我現在檢查一下。 – user1754045
atexit就是這樣。但是如果你也想跟蹤SIGKILL,你需要watcher-process來調用waitpid()。
另一種選擇是確保您的歷史記錄始終在磁盤上保持最新(在您使用的系統調用的限制範圍內)。當你去執行一個命令時,你啓動命令並寫入歷史文件。然後,如果程序被終止,那麼歷史在磁盤上是最新的,準備下一次shell運行。 –