天天看點

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

#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.漏洞利用的原理及其過程 攻擊者發送一個附加攻擊載荷的漏洞攻擊代碼給存在漏洞的系統.漏洞攻擊代碼首先執行,如果執行成功,攻擊載荷中的實際代碼 ...