2014-01-12 49 views
0

我正在研究oreilly書中的信號。我遇到了這個。Linux中的信號

#include <signal.h> 
typedef void (*sighandler_t)(int);----> func ptr returns void. uses typedef 
sighandler_t signal (int signo, sighandler_t handler); 

後來在代碼中。他只是用

void sigint_handler (int signo)----> normal function returning void 
{ 

} 

可以TYPEDEF上的功能

我想知道它是如何工作

回答

0

可以TYPEDEF上的功能

是應用於應用.... 。

I w螞蟻知道它是如何工作

視爲您已閱讀的例子 - 語法是相當模糊的(25年後的C我還是要考慮一下),但它是相當簡單的。如果使用typedefs,則傳遞和存儲指向函數的指針將大大簡化。因爲你不能成爲C程序員並避免它們,所以我建議你不妨繞道路並學習指向它們的函數和類型定義的指針,或者把它當作現在的讀取並返回指向函數的指針。

+0

嗨mattnz。謝謝你的建議。我知道指針和函數指針和typedef。我沒有在函數上應用typedef。後來我將typedef應用到函數的工作上,函數ptrs的工作。如果你知道這些Signal API的請解釋我,並讓我清楚 – user113883

0

信號就像一箇中斷,當它由用戶級別生成時,會調用OS的內核並且會相應地執行操作。要創建一個信號,在這裏,我只是告訴你一個例子

#include<stdio.h> 
#include<signal.h> 
#include<sys/types.h> 
void sig_handler1(int num) 
{ 
    printf("You are here becoz of signal:%d\n",num); 
    signal(SIGQUIT,SIG_DFL); 
} 
void sig_handler(int num) 
{ 
    printf("\nHi! You are here becz of signal:%d\n",num); 
} 
int main() 
{ 
    signal(SIGINT,sig_handler1); 
    signal(SIGQUIT,sig_handler); 
    while(1) 
    { 
     printf("Hello\n"); 
     sleep(2); 
    } 

} 

運行此代碼,如果你按下Ctrl + C,然後一條消息會顯示之後 - 「你在這裏becoz信號:2」,而不是在quiting一個的根據我們的行動我們已經改變了信號的過程。因爲,Ctrl + C是一個可屏蔽的信號。

要知道的信號更anbout信號類型的示例,請按照鏈接:

http://www.firmcodes.com/signals-in-linux/