有人可以解释一下 C 中 signal() 语法的含义吗? [复制]

Posted

技术标签:

【中文标题】有人可以解释一下 C 中 signal() 语法的含义吗? [复制]【英文标题】:can someone please explain the meaning of the signal() syntax in C? [duplicate] 【发布时间】:2012-09-24 17:35:45 【问题描述】:

可能重复:C declaration from standard signal Library

这里是语法链接的参考。我只了解指向函数的指针的语法。但这太复杂了,请解释一下。

http://www.cplusplus.com/reference/clibrary/csignal/signal/

我试图理解给出的精确语法(一些我无法解决的指针混淆)。

【问题讨论】:

你读过wiki信号吗? 另外,请更正您的帖子,链接未通过。 不要误会我的意思。我正在投票关闭并查看您所询问的 dup:P 看我的回答here。 【参考方案1】:

signal() 很容易理解,这里的示例代码来自我在注释中提到的链接:

//This is a signal handling function. When your main program gets a signal, it
// will call this function. The function just prints a message.
static void catch_function(int signal) 
    printf("Interactive attention signal caught.");


int main(void) 
    //register to catch the interrupt signal.
    if (signal(SIGINT, catch_function) == SIG_ERR) 
        printf("An error occurred while setting a signal handler.\n");
        return EXIT_FAILURE;
    
    while(1)
    
      printf("do stuff\n");
      sleep(1);
    

现在这段代码将永远循环(做某事),直到它得到一个 ^C (ctrl+C) 中断信号。到那时它就会去做我们告诉它去做的任何事情:

mike@linux-4puc:~> ./a.out 
do stuff
do stuff
^CInteractive attention signal caught.do stuff
do stuff
do stuff
do stuff
do stuff
^CInteractive attention signal caught.do stuff

信号函数定义为:

typedef void (*sighandler_t)(int); //this just means a pointer to a function
                                   //that looks like:  void sighandler(int)

sighandler_t signal(int signum, sighandler_t handler); 

这意味着:

    指向处理信号的函数的指针可以称为“sighandler_t” 满足sighandler_t类型的函数需要什么都不返回,取一个int 然后信号函数接受信号类型的参数进行捕捉,以及满足“sighandler_t”类型定义的函数。

然后在系统级别,当我们的程序运行时,如果有信号进来并且我们已经对其进行了处理,我们就会这样做,如果我们没有适当的处理,操作系统会采取默认操作。

如果您从上面的示例中删除信号调用,您会看到 ctrl+C 现在会终止程序,而不仅仅是允许信号处理程序运行。

回答你的问题?

【讨论】:

以上是关于有人可以解释一下 C 中 signal() 语法的含义吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 语法 ??意思,有人能解释一下吗? [复制]

有人可以解释一下这里发生了啥吗?存在普遍量化

linux signal(SIGINT,SIG_IGN);大概解释一下

“signal”的英文解释?

有人可以向我解释 asp.net 路由语法吗?

有人可以解释这些通用语法吗? [重复]