splice()函數,'SPLICE_F_MOVE' 'SPLICE_F_NONBLOCK' 'SPLICE_F_MORE' undeclared

来源:http://www.cnblogs.com/yuuyuu/archive/2016/01/01/5092852.html
-Advertisement-
Play Games

1.編譯含有splice()函數的程式時出現,'SPLICE_F_MOVE' undeclared,'SPLICE_F_NONBLOCK' ‘SPLICE_F_MORE' 也是一樣undeclared!2.使用man splice查看,發現要定義巨集_GNU_SOURCE1 #define _GNU_...


1.編譯含有splice()函數的程式時出現,'SPLICE_F_MOVE'  undeclared,'SPLICE_F_NONBLOCK' ‘SPLICE_F_MORE' 也是一樣undeclared!

2.使用man splice查看,發現要定義巨集_GNU_SOURCE

1 #define _GNU_SOURCE         /* See feature_test_macros(7) */
2 #include <fcntl.h>
3 
4 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)

1 $:man feature_test_macros

man手冊上面的描述是:特性測試巨集允許程式編譯時控制系統頭文件的巨集定義!

1 NAME
2        feature_test_macros - feature test macros
3 
4 SYNOPSIS
5        #include <features.h>
6 
7 DESCRIPTION
8        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>頭文件裡面,查看頭文件

1 $:vim /usr/include/fcntl.h

然而裡面並沒有這幾個巨集,但裡面有包含了<features.h>,<bits/fcntl.h>文件,我們跟進去這2個文件。我的系統是64位的kail。

bits文件夾在/usr/include/x86_64-linux-gnu/bits/

1 $:vim /usr/include/features.h
2 $:vim /usr/include/x86_64-linux-gnu/bits/fcntl.h

這2個裡面都也沒有,<bits/fcntl.h>文件裡面又包含了<bits/fcntl-linux.h>。我們繼續跟進。

1 $:vim /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h

這次我們找到了:

1 /* Flags for SPLICE and VMSPLICE.  */
2 # define SPLICE_F_MOVE      1   /* Move pages instead of copying.  */
3 # define SPLICE_F_NONBLOCK  2   /* Don't block on the pipe splicing
4                         (but we may still block on the fd
5                         we splice from/to).  */
6 # define SPLICE_F_MORE      4   /* Expect more data.  */
7 # define SPLICE_F_GIFT      8   /* Pages passed in are a gift.  */

4.現在我們根據這幾個巨集定義的上下文來查看跟_GNU_SOURCE巨集的聯繫。

這4個巨集包含在#ifdef __USE_GNU裡面,我回頭在看看features.h

1 $:vim /usr/include/features.h

直接搜索__USE_GNU,發現裡面有這個定義,跟_GNU_SOURCE關聯。

#ifdef  _GNU_SOURCE
# define __USE_GNU  1
#endif

5.如果不註重裡面的包含細節,直接用grep搜索,簡單粗暴!!!

$:grep -rn 'SPLICE_F' /usr/include/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文主要內容:1)管程(Monitor)介紹;2)管程實現;3)管程應用
  • 1.批量創建10個用戶stu01-stu10,並且設置隨機8位密碼,要求不能用shell迴圈(例如:for,while等),只能用命令及管道實現。 1 ##方法1: 2 [root@server tmp]# echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#us...
  • 配置Samba 如果沒有普通用戶,添加用戶,指令: useradd -m aaa passwd bbb 添加Samba用戶指令: smbpasswd -a aaa passwdword: …… 修改配置文件/etc/samba/smb.conf[aaa] comment = aaa ...
  • 1.先上圖 下麵是tcpdump的源碼。顏色根據自己的喜好配置,我比較喜歡亮的顏色,看的清楚!2.下載輔助配置文件 首先,我們下載一個vim的插件xterm-color-table.vim,下載地址:http://www.vim.org/scripts/sc...
  • 1.前言 編譯linux內核失敗的原因很多時候就是驅動選錯,適合自己本機的驅動沒編譯進去。面對特殊平臺(或者有些潔癖者,我就是^_^),要編譯精簡內核,只要本機驅動,其他都不需要。面對內核裡面這麼多驅動,不懂硬體的我們,看到都頭大。本人第一次安裝gent...
  • 1. 配置SSH遠程登錄 root@kali:~ vi /etc/ssh/sshd_config \ PermitRootLogin without password PermitRootLogin yes root@kali:~ service ssh restart 2. 設置開...
  • 首先,確保lamp環境已安裝好。準備好項目源代碼,資料庫備份文件等。由於沒有安裝好VNC,因此只能用ssh部署了。 將項目源代碼壓縮,Linux預設是支持SFTP的,用SFTP將源代碼壓縮包上傳到 /var/www/html 目錄下。關於FTP軟體,我覺得可以使用Notepad++的NPPFt...
  • OpenGL視窗 能用於OpenGL的視窗庫有很多,常見的有glut、freeglut、SDL、GLFW等。glut基本已經被廢棄,其他幾個再不同場合都有不同的應用。 GLFW為opengl superbible 6th & 7th中推薦的第三方開源視窗庫。GLFW的特點大概總結如下: 跨平臺,能在...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...