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 ...
随机推荐
- 解决jQuery插件冲突
项目框架的JS库集成了jQuery,Layout页面(模板页面,类似ASP.NET的母版页)中引用了这些JS,后来使用图表插件(图表插件是基于jQuery的)的时候,项目框架中的JS和图表插件有冲突, ...
- [水煮 ASP.NET Web API 2 方法论] 目 录
一.ASP.NET 中的 Web API [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API 与 ASP.NET MVC 在同一个进程 ...
- ADO.NET 增 删 改 查
ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...
- AssemblyInfo文件
程序生成版本信息 AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数 请看以下具体说明: //备注: [assembly:AssemblyDescription ...
- Linux Shell系列教程之(十四) Shell Select教程
本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...
- CentOS修改服务器系统时间
linux安装完毕后,一般都是国外的世界,一点都不方便设置任务,或者导致网站获取本地的时间错乱,所以就需要把服务器的时间改为和本地时间一致,也就是换成中国的时间. 第一条指令:date –s '201 ...
- eclipse中的web项目路径和发布好的项目路径
现在企业开发中,我们都会创建一个javaWeb工程,在eclipse中指的是新建一个dynamic web project,创建完工程之后,我们在IDE中大体看到如下的工程目录: 我们主要关心的文件夹 ...
- git version 2.5.0.windows.1中文乱码问题解决方案
UI部分 Options->Text Local:zh_CN,Character set:GBK ~/.GitConfig [gui] encoding = utf-8 [tgit] proje ...
- 每日微软面试题——day 6(打印所有对称子串)
每日微软面试题——day 6(打印所有对称子串) 分类: 2.数据结构与算法2011-08-14 14:27 9595人阅读 评论(15) 收藏 举报 面试微软string测试systemdistan ...
- es配置说明
cluster代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来 ...