2013-08-16 16 views
4

我想將一些C軟件移植到win32,但我不知道如何處理SIGQUIT信號。我檢查了Mingw的signal.h,它不支持SIGQUIT(或者SIGHUP,但我假設我可以忽略這一點)。當移植到mingw時,「SIGQUIT」信號有什麼用?

它多次出現,這裏是一個例子:

switch (sig) { 
    case SIGHUP: 
    case SIGINT: 
    case SIGTERM: 
    case SIGQUIT: { 
     /* 
     // Bunch of code here removed 
     */ 
     exit(0); 
     break; 
    } 
} 

有什麼建議?

回答

6

Windows只支持a small range of signalsSIGQUIT不受支持。 mingw剛剛從微軟獲得了這些定義。

我只是檢查是否有人在使用它之前定義的:

switch (sig) { 
    case SIGINT: 
    case SIGTERM: 
#ifdef SIGHUP 
    case SIGHUP: 
#endif 
#ifdef SIGQUIT 
    case SIGQUIT: 
#endif 
    { 
     /* ... */ 
    } 
} 

或者當然,你也可以檢查_WIN32,它總是在常見的Windows預處理器定義,或__MINGW32__,它總是被定義當使用mingw預處理器時。 不要因這些名稱中的「32」而感到困惑:在爲64位Windows編譯時,它們也會被定義。

+0

我意識到我可以忽略它,但令我困擾的是SIGQUIT案例是唯一一個帶有代碼_and_以exit()結尾的案例。假設我可以忽略它是否安全?將SIGQUIT代碼移動到另一個例子,如SIGTERM,是否合乎邏輯? – Nate

+0

那麼,這肯定取決於你的代碼和程序邏輯......在你的應用程序中將它映射到SIGINT或SIGTERM(甚至SIGHUP,不知道你的代碼)可能是合乎邏輯的; – nmaier

+0

事情並非如此即使我的代碼!哈哈,謝謝,雖然我會搗鼓它,看看我能做些什麼。 – Nate

相關問題