【问题标题】:How can sigaction be both struct and function?sigaction 如何既是结构又是函数?
【发布时间】:2015-04-20 20:48:55
【问题描述】:

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

【问题讨论】:

    标签: c linux unix sigaction


    【解决方案1】:

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

    (C11, 6.2.3 标识符 p1 的命名空间) “如果一个特定标识符的多个声明在一个 翻译单元,句法上下文消除了引用不同实体的用法的歧义。 因此,不同类别的标识符有单独的名称空间,如下所示:

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

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

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

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

    .

    【讨论】:

    • 这里的关键点是通过关键字struct 消除歧义。你不能 typedef struct signalsignal - 这会使这个标识符不明确。
    猜你喜欢
    • 2016-05-08
    • 2010-09-27
    • 1970-01-01
    • 2018-07-31
    • 2016-09-27
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多