4

我注意到它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));
    }
4

1 回答 1

5

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

(C11, 6.2.3 标识符 p1 的名称空间)“如果在翻译单元中的任何位置可见多个特定标识符的声明,则句法上下文消除了引用不同实体的用法的歧义。因此,存在单独的名称空间对于各种类别的标识符,如下所示:

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

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

  • 结构或工会的成员;每个结构或联合对其成员都有一个单独的名称空间(通过用于通过 . 或 -> 运算符访问成员的表达式的类型来消除歧义);

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

.

于 2015-04-20T20:49:49.917 回答