2015-04-29 16 views
0

程序是非常簡單的,我有一個處理函數命名fintr()和程序是:爲什麼我們在linux c程序的開始時調用signal函數?

void fintr(); 

int main() { 
    int i; 
    signal(SIGINT,fintr); 
    while(1) { 
     printf("*"); 
    } 
    return 0; 
} 

void fintr() { 
    printf("signal received"); 
    exit(1); 
} 

我可以把signal(SIGINT,fintr);在功能main()的結束?爲什麼我們必須把它放在main()的開頭?

+0

'printf()'不是異步安全的,AFAIK。你的程序毫無意義。 – EOF

回答

2

把它放在最後意味着它會在while (1) ...循環之後出現,所以不可以,因爲它永遠不會被執行。

另外,請注意您在信號處理程序中放置的代碼:在信號處理程序中調用printf()是不安全的。

相關問題