2014-01-12 50 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/