splice函数 linux,splice()函数,'SPLICE_F_MOVE' 'SPLICE_F_NONBLOCK' 'SPLICE_F_MORE' undeclared

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

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

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()函数定义在头文件里面,查看头文件

$:vim /usr/include/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个里面都也没有,文件里面又包含了。我们继续跟进。

$: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/

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

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

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

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

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

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

splice()函数的使用方法

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

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

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

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

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

js数组的splice函数

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

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

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

随机推荐

JavaScript的学习--JavaScript设计模式的总结

这篇博客只是自己对设计模式的理解的备忘~ 看完了这本书,一直没有写博客记录一下,最近抽出时间来重读了一下,就顺便记录一下~ 如果你只是想粗略了解一下Java ...

Windows CMD命令大全

http://greatverve.cnblogs.com/archive/2011/12/09/windows-cmd.html 命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机 ...

POJ3107 (树的重心)

; INF=; type arr=record u,v,nt:longint; end; arr1=..maxn] of longint; ..maxn*] of arr; lt:..maxn] of ...

hi3531的h264压缩中改动波特率

typedef struct hiVENC_ATTR_H264_CBR_S { HI_U32 u32Gop; HI_U32 u32StatTime; HI_U32 u32ViFrmRate; HI_F ...

如何为linux释放内存和缓存

如何为linux释放内存和缓存_华陌飞尘_新浪博客 如何为linux释放内存和缓存    (2011-10-20 10:49:01)        标签:    linux    swap    me ...

GCD教程(三):Dispatch Sources

接上一篇,原帖地址:http://www.dreamingwish.com/dream-2012/intro-to-grand-central-dispatch-part-iii-the-dispat ...

spark的运行模式

1.local(本地模式) 单机模式,通常用来测试 将spark应用以多线程方式,直接运行在本地 本地模式可以启动多个executor不过上限不能超过cpu数 2.standalone(独立模式) 独 ...

C++设计模式之工厂模式(1)

关于设计模式的作用: “帮助我们将应用组织成容易了解,容易维护,具有弹性的架构,建立可维护的OO系统,要诀在于随时想到系统以后可能需要的变化以及应付变化的原则.” 具体可参考:https://www. ...

Metasploit one test

1.对Metasploit的文件结构层次做一个目录结构图 2.漏洞利用的原理及其过程 攻击者发送一个附加攻击载荷的漏洞攻击代码给存在漏洞的系统.漏洞攻击代码首先执行,如果执行成功,攻击载荷中的实际代码 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值