1.編譯含有splice()函數的程式時出現,'SPLICE_F_MOVE' undeclared,'SPLICE_F_NONBLOCK' ‘SPLICE_F_MORE' 也是一樣undeclared!
2.使用man splice檢視,發現要定義宏_GNU_SOURCE
#define _GNU_SOURCE
#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
這次我們找到了:
# define SPLICE_F_MOVE
# define SPLICE_F_NONBLOCK
# define SPLICE_F_MORE
# define SPLICE_F_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.漏洞利用的原理及其過程 攻擊者發送一個附加攻擊載荷的漏洞攻擊代碼給存在漏洞的系統.漏洞攻擊代碼首先執行,如果執行成功,攻擊載荷中的實際代碼 ...