当前位置:  技术问答>linux和unix

关于signal函数的疑问

    来源: 互联网  发布时间:2016-03-20

    本文导语:  在书上看到一段代码 #include  #include  #include  void ouch(int sig) { printf("OUCH! -O gpt sogma; %dn",sig); (void) signal (SIGINT,SIG_DFL); } int main() { (void) signal(SIGINT, ouch); while(1) { printf("Hello World!n"); sleep(1); } } 我想知道...

在书上看到一段代码

#include 
#include 
#include 
void ouch(int sig)
{
printf("OUCH! -O gpt sogma; %dn",sig);
(void) signal (SIGINT,SIG_DFL);
}
int main()
{
(void) signal(SIGINT, ouch);
while(1)
{
printf("Hello World!n");
sleep(1);
}
}

我想知道在我输入中断信号ctr+c的时候,程序为什么能捕获到?
也就是程序为什么能执行signal(SIGINT,ouch);这条语句.
程序不是一直在while循环里执行吗?怎么又会跳到上一行执行?

还有signal函数的定义是:void (*signal (intsig,void (*func)(int)))(int);
函数要带一个整型参数,可上面的代码并没有带啊(上面的代码signal和func都没带啊),这又是怎么回事呢?

|
signal函数在哪调用都没有关系,LINUX内核一直会监控信号
在你的进程里面一旦发出中断信号ctr+c,就中断你的进程。

|
试着解答一下问题1:
在你的main函数里面,第一行是完成信号与函数的绑定,其后进入无限循环。
如果看一下微机原理,就可以大概知道中断的一个大体流程。不管是什么样的CPU,基本的地方都是相同的。中断向量表就是其中之一。中断向量表与中断类型一一对应,当对应类型的中断事件发生时,当中断发生的时候,你所建立的进程(此时正在进行无限循环)会被中断,程序计数器就会被指向对应的中断向量(或者说当前的程序会跳到对应中断向量的地址处),调用中断向量对应的一个函数,在这个函数中,会调用用户自己定义的函数,在这个例子里面就是你定义的并且在main函数中与SIG_INT进行了绑定的ouch函数。到这里的工作都是有操作系统和硬件共同来完成的,不受你的程序控制的。

对于问题2:
一般不用signal而用signal_action来进行绑定。

    
 
 

您可能感兴趣的文章:

  • 请教signal函数的用法!
  • signal函数定义该怎么理解?
  • 请问有没头函数<pthread.h>和<signal.h>里的函数的详细功能介绍?和使用方法???
  • 关于signal函数
  • 关于系统信号处理函数signal()的疑问.
  • signal的处理函数问题
  • 关于signal函数的问题
  • signal函数的定义问题?搞不懂.
  • signal函数使用出问题?
  • signal 函数请教
  • 关于signal函数的问题,大家帮我看看
  • 关于linux下的signal函数的问题
  • 在signal指定的处理函数中如何传进去一个值?
  • 向各位求助:关于signal函数
  • REDHAT LINUX 9中如何使用signal这个函数进行中断通信?
  • 谁能给我解释一下SIGNAL这个函数呀?
  • signal处理函数中的文件操作问题
  • 请问:signal(), sigaction()函数会不会使自已所有的进程挂起啊,(这样就等接收各种信号,进行一些处理工作啊)
  • 谁给解释下这个signal函数
  • linux中信号signal函数实例遇到的疑问
  • signal()基础知识,<<apue>>上的程序疑问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util.concurrent.locks接口condition的类成员方法: signal定义及介绍
  • signal 7和signal 11
  • 关于signal信号
  • 关于signal返回值是什么?
  • pending signal
  • 关于Linux驱动中signal的使用
  • about "signal"
  • 有关signal handler,请教!
  • signal handler 问题
  • signal的疑惑
  • 关于signal ()
  • signal和sigaction区别
  • PPP问题fatal signal 11
  • C/C++语言问题:(void) signal(SIGPIPE, pstat); 是什么意思?
  • alarm() 和 signal()的问题
  • ***************unix 系统中,信号量(signal)被屏蔽了,怎么开(是在命令行超作,不是在程序中)
  • 在类中使用signal编译不通过
  • Program received signal SIGPIPE, Broken pipe. 这是什么回事?
  • 如何将自定义的信号发给signal表记的进程?
  • 急急急!gdb下Program received signal SIGABRT, Aborted.是什么错误?
  • signal传参问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3