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

2.使用man splice查看,发现要定义宏_GNU_SOURCE

 #define _GNU_SOURCE         /* See feature_test_macros(7) */
 #include <fcntl.h>

 ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags);

我们跟着后面宏的注释See feature_test_macros(7)

 $:man feature_test_macros

man手册上面的描述是:特性测试宏允许程序编译时控制系统头文件的宏定义!

 NAME
        feature_test_macros - feature test macros

 SYNOPSIS
        #include <features.h>

 DESCRIPTION
        Feature test macros allow the programmer to control the definitions that are exposed by system header files when a program is compiled.

3.我们找找看,splice()函数的这个几个flags参数宏定义在哪里。splice()函数定义在<fcntl.h>头文件里面,查看头文件

 $:vim /usr/include/fcntl.h

然而里面并没有这几个宏,但里面有包含了<features.h>,<bits/fcntl.h>文件,我们跟进去这2个文件。我的系统是64位的kail。

bits文件夹在/usr/include/x86_64-linux-gnu/bits/

 $:vim /usr/include/features.h
 $:vim /usr/include/x86_64-linux-gnu/bits/fcntl.h

这2个里面都也没有,<bits/fcntl.h>文件里面又包含了<bits/fcntl-linux.h>。我们继续跟进。

 $:vim /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h

这次我们找到了:

 /* Flags for SPLICE and VMSPLICE.  */
 # define SPLICE_F_MOVE         /* Move pages instead of copying.  */
 # define SPLICE_F_NONBLOCK     /* Don't block on the pipe splicing
                         (but we may still block on the fd
                         we splice from/to).  */
 # define SPLICE_F_MORE         /* Expect more data.  */
 # define SPLICE_F_GIFT         /* Pages passed in are a gift.  */

4.现在我们根据这几个宏定义的上下文来查看跟_GNU_SOURCE宏的联系。

这4个宏包含在#ifdef __USE_GNU里面,我回头在看看features.h

 $:vim /usr/include/features.h

直接搜索__USE_GNU,发现里面有这个定义,跟_GNU_SOURCE关联。

#ifdef  _GNU_SOURCE
# define __USE_GNU
#endif

5.如果不注重里面的包含细节,直接用grep搜索,简单粗暴!!!

$:grep -rn 'SPLICE_F' /usr/include/

splice()函数,'SPLICE_F_MOVE' 'SPLICE_F_NONBLOCK' 'SPLICE_F_MORE' undeclared的更多相关文章

  1. linux网络编程九:splice函数,高效的零拷贝

    from:http://blog.csdn.net/jasonliuvip/article/details/22600569 linux网络编程九:splice函数,高效的零拷贝 最近在看<Li ...

  2. 高级I/O函数(2)-splice函数

    splice函数: 功能描述:用于在两个文件描述符之间移动数据,也是零拷贝操作.函数定义如下: #include <fcntl.h> ssize_t splice(int fd_in,lo ...

  3. linux网络编程:splice函数和tee( )函数高效的零拷贝

    splice( )函数 在两个文件描述符之间移动数据,同sendfile( )函数一样,也是零拷贝. 函数原型: #include <fcntl.h> ssize_t splice(int ...

  4. splice()函数的使用方法

    splice()函数的使用方法,这是一个拗口的函数.用起来有点麻烦.图3所看到的是splice函数的功能.将一个列表插入到还有一个列表其中.list容器类定义了splice()函数的3个版本号: sp ...

  5. js splice函数 数组增加,替换,删除

    splice函数参数介绍: 第一个参数: 对于数数组的操作起始位置. 第二个参数: 从第一个参数开始,删除数组中的个数. 从第三个参数之后所有参数(如果有):执行完第二步之后,都插入到第一个参数的起始 ...

  6. ZOJ 4016 Mergeable Stack(利用list模拟多个栈的合并,STL的应用,splice函数!!!)

    Mergeable Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB Given initially empty stacks, ther ...

  7. js数组的splice函数

    一直没搞懂数组的splice函数,今天稍微测试了一下,了解了它的功能,在这里记录一下 1.测试 测试① var a = [1,2,3]; console.info(a.splice(1,1)); co ...

  8. 用 splice 函数分别实现 push、pop、shift、unshift 的方法

    主要需要注意的是不同方法他们本身返回的值应该是什么,是数组当前的长度,还是取出的元素的值,再在splice函数里面进行相应的return就可以了.具体如下: 用 splice函数实现 push方法 f ...

  9. Codeforces 1131 F. Asya And Kittens-双向链表(模拟或者STL list)+并查集(或者STL list的splice()函数)-对不起,我太菜了。。。 (Codeforces Round #541 (Div. 2))

    F. Asya And Kittens time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. 重构if...else...或者switch程序块

    我们在开发asp.net时,经常有使用if...else...或者是使用switch来进行多个条件判断.如下面这篇<用户控件(UserControl) 使用事件 Ver2>http://w ...

  2. [爬虫学习笔记]基于Bloom Filter的url去重模块UrlSeen

            Url Seen用来做url去重.对于一个大的爬虫系统,它可能已经有百亿或者千亿的url,新来一个url如何能快速的判断url是否已经出现过非常关键.因为大的爬虫系统可能一秒钟就会下载 ...

  3. Google判断广告点击作弊的几种方式和数据

     Google判断广告点击作弊的几种方式和数据. 作弊广告点击的CTR数据太高网上有研究说如果CTR值大于了10%的站被干掉的可能性很高,他们会被单独拿出来分析.一般来说低于6-7%的CTR是安全红线 ...

  4. Python入门笔记(12):表达式和语句

    一.Python语句 if语句.else语句.elif语句.条件表达式.while语句.for语句.break语句.continue语句.pass语句.Iterators(迭代器).列表解析 二.常用 ...

  5. Python入门笔记(9):元组

    一.元组特性 1.类似列表,但不可变类型,正因如此,它可以做一个字典的key2.当处理一组对象时,这个组默认是元组类型(老写错"元祖")3.所有的多对象,逗号分隔的,没有明确用符号 ...

  6. 【循序渐进学Python】11.常用标准库

    安装完Python之后,我们也同时获得了强大的Python标准库,通过使用这些标准库可以为我们节省大量的时间.这里是一些常用标准库的简单说明.更多的标准库的说明,可以参考Python文档 sys 模块 ...

  7. java之StringBuilder类详解

    StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...

  8. jsp iframe example

    1. jsp中用iframe的方式在body中展示列表, 可以通过父元素的宽.高来设定iframe的宽高. <div class="wrapper" style=" ...

  9. servlet中的转发和重定向问题

    重定向和请求转发在学习servlet的时候很容易混淆,故在此特意记录. 1. 重定向---------sendRedirect()方法 Servlet响应请求有两种方式,一个是重定向,返回一个页面给客 ...

  10. java系统库性能优化注意点

    对于大部分的应用系统开发来说,微秒级别的优化通常是被忽略不计或者不关心的,因为有着更多优化点,但是对于开发供应用系统使用的公用库来说,大部分的操作通常都是对字符.数字.字符串.字节的操作,且这些系统库 ...