2013-12-17 66 views
2

我有一個在Linux命令行上運行的程序。它分配一些內存,打開一些文件描述符,等等。我想要一個很好的方式來讓用戶輸入停止程序,同時仍然進行清理並且不中斷某些文件的讀/寫。什麼是正確的方法來做到這一點?到目前爲止,我一直在使用CTRL + C來停止該程序,但是我覺得這樣做並沒有正確地進行清理,並且這並不能讓我的程序有機會做一個寫入日誌文件來指示它正在關閉。 目前,我這樣做: - 設置標準輸入非阻塞(使程序不會掛起等待輸入)Linux/C如何正確結束命令行程序

while(loop_variable != 'q') { 
loop_variable = getchar(); 
... 
} 

有什麼建議?

+3

Catch SIGINT,當用戶輸入時發送^ C –

+3

它「感覺」你的程序沒有做什麼清理?在終止一個進程後,內核會清理所有的東西給你。 –

+2

或者只是讓用戶輸入^ D,以便getchar返回EOF。 –

回答

3

William Pursell評論說,你可以捕捉SIGINT。

下面介紹如何在SIGINT被捕獲時實現清理。

首先,定義清理函數。在這個功能中,你可以做所有的房子清潔。在main()函數中,您可以調用signal()並傳遞函數清理的名稱和關聯的信號來捕獲。您可以捕捉適合您用戶操作的多種類型的信號。

signal(SIGINT, cleanup); 
signal(SIGQUIT, cleanup); 
+0

這看起來正是我想要做的,謝謝!它看起來像我將不得不做任何文件描述符等全球爲了訪問他們從清理功能,對吧? – IanM

相關問題