资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言信号处理函数 C语言信号量

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

signal()是一种系统调用,用于通知运行时系统,当某种特定的“软件中断”发生时调用特定的程序。它的真正的名字应该是“Call_that_routine_when_this_interrupt_Comes_in(当该中断发生时调用那个程序)”,调用signal()函数,并通过参数传递告诉它终端类型以及用于处理中断的程序。

成都创新互联作为成都网站建设公司,专注重庆网站建设、网站设计,有关成都企业网站定制方案、改版、费用等问题,行业涉及成都人造雾等多个领域,已为上千家企业服务,得到了客户的尊重与认可。

ANSIC 标准中,signal()函数的声明如下:

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

signal是一个函数,他返回一个函数指针,后者所指向的函数接受一个int参数并返回void 。

C语言中的exit函数

exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统。

在c语言中: exit(0):表示正常退出;exit(1):表示异常退出,这个1是返回给操作系统;值是返回操作系统的:0是正常退出,而其他值都是异常退出,所以我们在设计程序时,可以在推出前给一些小的提示信息,或者在调试程序的过程中查看出错原因。

使用exit()时,可以不论main()的返回值类型,它的头文件是 stdlib.h。

扩展资料:

进程函数:所在函数库为stdlib.h、process.h

void abort() 此函数通过调用具有出口代码3的_exit写一个终止信息于stderr,并异常终止程序 无返回值。

void _exit(int status)终止当前程序,但不清理现场。

void exit(int status) 终止当前程序,关闭所有文件,写缓冲区的输出(等待输出),并调用任何寄存器的"出口函数",无返回值。

参考资料:百度百科-C语言函数

C语言中(void)signal(SIGALRM, alarmhandle);是什么意思

signal(SIGALRM, alarmhandle); 表示给当前进程注册SIGALRM信号处理代码,如果收到SIGALRM信号,就会去执行alarmhandle函数

$ man signal

...

SYNOPSIS

#include signal.h

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

DESCRIPTION

The  signal() system call installs a new signal handler for the signal with number signum.  The signal handler is set to sighandler which may be a user specified function, or either SIG_IGN or SIG_DFL.

signal()函数是个系统调用,该函数按signum设定一个新的信号处理句柄(函数).新设定的处理函数可以是用户自定义的函数,也可以是系统指定的SIG_IGN 或 SIG_DFL.

参考代码:

#include signal.h

#include unistd.h

#include stdio.h

#include stdlib.h

void alarmhandle(int sig)

{

printf("recv sig:%d\n", sig );

printf("exit!\n");

exit(0);

}

int main()

{

signal( SIGALRM, alarmhandle );

printf("begin...\n");

alarm(5); //定时器,用于在5秒后产生SIGALRM信号

while( 1 );

return 0;

}

运行结果:

begin...

recv sig:14

exit!

C语言中信号问题

信号是程序执行过程中出现的异常情况。它可能是由程序中的错误造成的,例如引用内存中的一个非法地址;或者是由程序数据中的错误造成的,例如浮点数被0除;或者是由外部事件引发的,例如用户按了Ctrl+Break键。

你可以利用标准库函数signal()指定要对这些异常情况采取的处理措施(实施处理措施的函数被称为“信号处理函数”)。signal()的原型为:

#include signal.h

void(*signal(int hum,void(*func)(int)))(int);

如果定义一个typedef,理解起来就容易一些了。下面给出的sigHandler_t类型是指向一个程序的指针,该函数有一个int类型的参数,并且返回一个void类型:

typedef void(*sigHandler_t)(int);

sigHandler_t signal(int num , sigHandler_t func);

signal()有两个参数,分别为int类型和sigHandler_t类型,其返回值为sigHandler_t类型。以func参数形式传递给signal()的那个函数将成为第num号异常情况的新的信号处理函数。signal()的返回值是信号hum原来的信号处理函数。在设置了一个暂时的信号处理函数之后,你可以利用该值恢复程序先前的行为。num的可能值依赖于系统,并且在signal.h中列出。func的可能值可以是你的程序中的任意函数,或者是SIG_DFL和SLG_IGN这两个特别定义的值之一。SIG_DFL是指系统的缺省处理措施,通常是暂停执行程序;SIG_IGN表示信号将被忽略。


分享标题:c语言信号处理函数 C语言信号量
当前地址:http://cdkjz.cn/article/dodoedo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220