2012-11-28 70 views
0

我正在做一個任務,我正在shell中實現unix歷史命令。在我的程序中,我爲SIGINT寫了一個信號處理程序。當用戶進入(ctrl)(c)他們的歷史被顯示。如何在我的c程序退出時創建文件?

當我的程序終止時,我需要將歷史記錄存儲在一個文件中。有一種簡單的方法來檢測我的程序何時退出?或者我需要爲每種類型的信號((ctrl)(d),暫停等)設置一個信號處理程序。

+0

另一種選擇是確保您的歷史記錄始終在磁盤上保持最新(在您使用的系統調用的限制範圍內)。當你去執行一個命令時,你啓動命令並寫入歷史文件。然後,如果程序被終止,那麼歷史在磁盤上是最新的,準備下一次shell運行。 –

回答

5

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 */ 
} 
+0

謝謝,我現在檢查一下。 – user1754045

2

atexit就是這樣。但是如果你也想跟蹤SIGKILL,你需要watcher-process來調用waitpid()。

相關問題