2014-11-02 120 views
1

嘗試使用this function執行處理中斷處理。
在OS X上運行10.10以下代碼:signal()處理程序立即被觸發

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include "sys/wait.h" 

sig_t terminate(){ 
    printf("Thanks for the fish!\n"); 
    exit(EXIT_SUCCESS); 
} 

int main(int argc, const char * argv[]) { 
    signal(SIGINT, terminate()); 
    while (1){ 
     printf("P"); 
    }  
} 

問題是,該terminate功能正在運行的程序後立即調用。意思是,人們看不到一個P,但只有一行Thanks for the fish!。我究竟做錯了什麼?

回答

4

傳遞,而不是調用函數

signal(SIGINT, terminate); 

而且信號的功能名稱採用類型

void handler_function (int parameter); 
+0

改變了'sig_t終止(){''到空隙終止(){'連同該溶液中。現在工作。謝謝 – Clawish 2014-11-02 14:09:54

3

信號處理程序不匹配,需要原型的函數指針。您應該重新定義terminate()int作爲參數並返回void

即,

void terminate(int sig) { 
    printf("Thanks for the fish!\n"); 
    exit(EXIT_SUCCESS); 
} 

// ... 
signal(SIGINT, terminate); 
相關問題