【问题标题】:Why do we need to define _GNU_SOURCE macro before using POLLRDHUP event flag in poll() function?为什么我们需要在 poll() 函数中使用 POLLRDHUP 事件标志之前定义 _GNU_SOURCE 宏?
【发布时间】:2013-08-13 11:33:02
【问题描述】:

我在我的程序中使用poll() 函数,我读到this link 要使用POLLRDHUP 标志,您必须在包含所有头文件之前定义_GNU_SOURCE。我需要这个标志,以便轮询套接字可以告诉我客户端是否挂起,以便我可以终止相应的线程。

顺便说一句,我正在为可以同时处理多个客户端的“echo”服务器编写 C 程序,并且我在 OpenSuse Linux Enterprise Server 10.3 (x86_64) 上使用 GCC 4.1.2。

【问题讨论】:

    标签: c sockets opensuse


    【解决方案1】:

    POLLRDHUP 是一个非标准扩展(它是missing from POSIX)。为防止污染命名空间,非标准扩展是不可见的,除非您通过defining _GNU_SOURCE 明确请求它们。

    有关_GNU_SOURCE 的更多详细信息,请参阅之前的 StackOverflow 答案such as this one

    【讨论】:

    • 感谢您的回答以及给定链接上_GNU_SOURCE 的详细信息。
    • 给定的链接还建议将#define _GNU_SOURCE设置为“文件中的第一件事,仅以 cmets 开头”。
    【解决方案2】:

    _GNU_SOURCE 是一个功能测试宏,通过防止暴露非标准定义,可用于创建可移植应用程序。

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多