C语言中的signal函数的作用是什么啊

来源:百度知道 编辑:UC知道 时间:2024/05/30 21:07:26
想问下:C语言中的signal函数的作用是什么啊?
对于signal函数的声明分析我会的,我要的不是声明分析,是函数的功能

signal()是一种系统调用,用于通知运行时系统,当某种特定的“软件中断”发生时调用特定的程序。它的真正的名字应该是“Call_that_routine_when_this_interrupt_Comes_in(当该中断发生时调用那个程序)”,调用signal()函数,并通过参数传递告诉它终端类型以及用于处理中断的程序。
ANSIC 标准中,signal()函数的声明如下:
void (*signal (int sig ,void (*func)(int))) (int) ;
signal是一个函数,他返回一个函数指针,后者所指向的函数接受一个int参数并返回void 。

看样子和shell 脚本中的trap 命令差不多。
就是在程序收到制定的信号时候,调用指定的函数。

你需要了解的是信号是系统内部使用的一种机制,

比如你的程序正在前台运行,你又突然按了下ctrl+c 强制退出,那么程序正在运行 的时候可能就被干掉了。而 trap 或者siganal 函数就可以让你在某种不正常退出的情况下,再调用你指定的函数,可以做些清理工作啊什么的。
当然,信号是有很多种的,什么情况下有什么信号,你可以看下Linux的说明文档吗。 man trap 好像就可以看到

对于 信号处理函数 位于 <signal.h> 中.

void ( *signal( int sig, void (* handler)( int ))) ( int );

这个函数的声明很是吓人, 一看就难弄懂. 下面是解释用法.

一步一步解释:

int (*p)();
这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.

int (*fun())();
这个式子与上面式子的区别在于用fun()代替了p,而fun()是一个函数,所以说就可以看成是fun()这个函数执行之后,它的返回值是一个函数指针,这个函数指针(其实就是上面的p)所指向的函数是一个不带任何参数,并且返回值为int的一个函数.