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 <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的更多相关文章
- linux网络编程九:splice函数,高效的零拷贝
from:http://blog.csdn.net/jasonliuvip/article/details/22600569 linux网络编程九:splice函数,高效的零拷贝 最近在看<Li ...
- 高级I/O函数(2)-splice函数
splice函数: 功能描述:用于在两个文件描述符之间移动数据,也是零拷贝操作.函数定义如下: #include <fcntl.h> ssize_t splice(int fd_in,lo ...
- linux网络编程:splice函数和tee( )函数高效的零拷贝
splice( )函数 在两个文件描述符之间移动数据,同sendfile( )函数一样,也是零拷贝. 函数原型: #include <fcntl.h> 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 ...
- 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 ...
随机推荐
- Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用
最近一直在做一些技术性的研究和框架改进工作,博客也落下好几天没有更新了,也该是时候静下心来,总结这段时间的一些技术改进的经验了.和上一阶段的CRM系统开发和技术研究一样,我都喜欢在一个项目或者模块完成 ...
- 微信公众平台入门开发教程.Net(C#)框架
一.序言 一直在想第一次写博客,应该写点什么好?正好最近在研究微信公众平台开发,索性就记录下,分享下自己的心得,也分享下本人简单模仿asp.net运行机制所写的通用的微信公众平台开发.Net(c#)框 ...
- Python中的元组(tuple)、列表(list)、字典(dict)
-------------------------------更新中-------------------------------------- 元组(tuple): 元组常用小括号表示,即:(),元 ...
- [moka同学笔记]Yii2.0 dropDownList的使用(二)
方法一: <?php $psObjs = Poststatus::find()->all(); $allStatus = ArrayHelper::map($psObjs,'id','na ...
- FAQ_1_陌生的VERSION.SDK_INT
看到VERSION.SDK_INT不禁诧异,这是何物?! 看API的定义,如下: 原来是一个常量值.但是这个常量值可以根据系统的不同而不同哟!为了揭开其神秘的面纱,将源码ctrl如下: 可以看出,获取 ...
- winform(MDI窗体容器、权限设置)
一.MDI窗体容器: 1.功能: 它可以让其它窗体在它的内部打开,无法超出它的范围 将某个窗体的属性:IsMdiContainer设置为true - 窗口样式 2.问题: (1)如何将其它窗体在它的内 ...
- HTML JavaScript简介
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- wap网站safari浏览器和微信cooke不能登录问题
wap网站safari浏览器cooke不能登录问题: http://wenku.baidu.com/link?url=VnPxl43PySYVygt09vkQ7xwxOD0JCXNtw3Fx7100j ...
- JavaScript基础16——js的BOM对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- js 数组常用方法
var arr =[0,1,2,3,4,5,6,7,8,9]; 1,shift() 删除数组的第一个元素,返回删除的值 //这里返回0 2,unshift(1,2) 把参数添加到数组的前面,返回值 ...