sigaction既可以是结构又可以是函数吗?

时间:2015-04-20 20:48:56

标签: c linux unix sigaction

我注意到sigaction被定义为结构和函数(http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html):

    int sigaction(int, const struct sigaction *restrict,
       struct sigaction *restrict);

使用它的一个例子是:

    struct sigaction sa;

    /* Set up handler */
    sa.sa_flags = SA_SIGINFO|SA_RESTART;
    sa.sa_sigaction = timer_expiry;

    /* Setup signal watchdog */
    if (sigaction(SIG_WDOG, &sa, NULL) == -1) {
       printf("ERROR: Failed to set wdog signal with %s",
           strerror(errno));
    }

1 个答案:

答案 0 :(得分:5)

C有几个标识符的名称空间;函数标识符和结构标记标识符位于不同的名称空间中。

  

(C11,6.2.3标识符的名称空间p1)“如果在任何一点上可以看到特定标识符的多个声明   在翻译单元中,句法上下文消除了引用不同实体的用法。   因此,各种标识符类别都有单独的名称空间,如下所示:

     
      
  • 标签名称(通过标签声明和使用的语法消除歧义);

  •   
  • 关键字struct,union或enum)的结构,联合和枚举的标记(通过遵循any32消除歧义);

  •   
  • 结构或工会的成员;每个结构或联合都有一个单独的   为其成员命名空间(根据类型的歧义消除歧义)   用于通过访问成员的表达式。或 - >操作者);

  •   
  • 所有其他标识符,称为普通标识符(在普通声明符中声明或作为枚举常量声明)

  •