打开_GNU_SOURCE这个宏可以打开一些功能,比如为了在Linux系统上编译使用带有检测文件type的宏(S_ISxxxx):

S_ISREG() //传入stat结构的st_mode,下同。是否为普通文件

S_ISDIR() //是否为目录

S_ISLNK() //是否为符号链接

S_ISSOCK() //是否为套接字

这样子就能包含了上述宏的定义。

在编写网络程序时,会涉及到一些关于BSD系统保留下的结构体和宏定义,关于一切配置在linux系统的/usr/include/features.h文件中,开启项如下:

#ifdef _GNU_SOURCE
# undef  _ISOC99_SOURCE
# define _ISOC99_SOURCE 1
#
undef  _POSIX_SOURCE
# define _POSIX_SOURCE  1
# undef 
_POSIX_C_SOURCE
# define _POSIX_C_SOURCE        199506L
# undef 
_XOPEN_SOURCE
# define _XOPEN_SOURCE  600
# undef 
_XOPEN_SOURCE_EXTENDED
# define _XOPEN_SOURCE_EXTENDED 1
# undef 
_LARGEFILE64_SOURCE
# define _LARGEFILE64_SOURCE    1
# undef 
_BSD_SOURCE
# define _BSD_SOURCE    1
# undef  _SVID_SOURCE
# define
_SVID_SOURCE   1
#endif

可以看出只要开启了_GNU_SOURCE的花,大部分的BSD功能可以打开,看看_GNU_SOURCE是否开启有一个测试程序:

#include <iostream>
int main() {

#ifdef _GNU_SOURCE

std::cout << "gnu/n";

#else

std::cout << "non-gnu/n";

#endif

}

只要gcc -D _GNU_SOURCE test.c -o test.o编译生成的text.o文件,运行一下就知道是否开启了

_GNU_SOURCE宏的更多相关文章

  1. 关于_GNU_SOURCE宏

    是在features.h中用于特性控制的一个功能测试宏 /user/include/features.h /* If _GNU_SOURCE was defined by the user, turn ...

  2. _GUN_SOURCE宏

    问题描述:在编译程序时,提示一个错误和一个警告. error:storage size of tz isn’t know: 其中tz是struct timezone类型的变量. warning:imp ...

  3. 关于__GNU_SOURCE 这个宏---如何开启【转】

    关于__GNU_SOURCE 这个宏 转自:http://blog.csdn.net/stevenliyong/article/details/4160181 版权声明:本文为博主原创文章,未经博主允 ...

  4. C语言(函数)学习之strstr strcasestr

    C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...

  5. splice()函数,'SPLICE_F_MOVE' 'SPLICE_F_NONBLOCK' 'SPLICE_F_MORE' undeclared

    1.编译含有splice()函数的程序时出现,'SPLICE_F_MOVE'  undeclared,'SPLICE_F_NONBLOCK' ‘SPLICE_F_MORE' 也是一样undeclare ...

  6. 命令行参数(argc, argv)

    每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点.当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过两个入参提供给main()函数. ...

  7. 嵌入式系统C编程之堆栈回溯【转】

    转自:https://www.cnblogs.com/clover-toeic/p/3949896.html 前言 在嵌入式系统C语言开发调试过程中,常会遇到各类异常情况.一般可按需添加打印信息,以便 ...

  8. autotools

    文章目录 原文地址 Autotools上手指南1--autoconf基本思想 Autotools上手指南2--autoscan生成configure.ac Autotools上手指南3--autohe ...

  9. 嵌入式系统C编程之堆栈回溯

    前言 在嵌入式系统C语言开发调试过程中,常会遇到各类异常情况.一般可按需添加打印信息,以便观察程序执行流或变量值是否异常.然而,打印操作会占用CPU时间,而且代码中添加过多打印信息时会显得很凌乱.此外 ...

随机推荐

  1. HihoCoder 1104 : Suzhou Adventure(树形DP)

    Suzhou Adventure 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is taking an adventure in Suzhou n ...

  2. 深入了解ZooKeeper(二)

    在上篇博客<<深入了解ZooKeeper(一)>>中我们知道了分布式协调技术.分布式锁的实现和zookeeper服务机制,接下来将进一步了解zookeeper究竟能为我们做了什 ...

  3. 使用wlan接收器经常重新登录怎么办

    wlan接收器是一个大功率的网卡,能够接受耿远距离的无线网络,在农村和乡镇很普及,很多家庭里都是用这个装置来接受远距离的CMCC信号.但是在使用的时候会经常出现一些问题,例如我们登陆以后,还没等上网就 ...

  4. C# 操作嵌入的资源

    被嵌入的程序执行文件 namespace AppTest { class Program { static void Main(string[] args) { Console.WriteLine(& ...

  5. Python学习流程

    这是我在过去几家公司招聘到工程师,Python入职培训的过程. 时间分为4周,全部自学,仅提供大纲.适用于Web方向: 1.Week1:读完<简明Python教程>,适应Python开发环 ...

  6. gitlab pipelines 使用

    1. 安装runner   # For Debian/Ubuntu curl -L https://packages.gitlab.com/install/repositories/runner/gi ...

  7. POI 单元格

    OI 单元格合并中的CellRangeAddress 参数: CellRangeAddress(int, int, int, int) 参数:起始行号,终止行号, 起始列号,终止列号 sheet.ad ...

  8. Hibernate问题集锦: 概述

    Hibernate问题集锦: 概述   ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. Q.怎么配置hibernate? ...

  9. Linux 多路复用 select / poll

    多路复用都是在阻塞模式下有效! linux中的系统调用函数默认都是阻塞模式,例如应用层读不到驱动层的数据时,就会阻塞等待,直到有数据可读为止. 问题:在一个进程中,同时打开了两个或者两个以上的文件,读 ...

  10. nginx upstream配置

    upstream *.com { server 127.0.0.1:5000 weight=10 max_fails=2 fail_timeout=30s;} server { listen 80; ...