vmsplice() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

vmsplice() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

vmsplice - 將使用者頁面拼接入管道

語法

#define _GNU_SOURCE 
#include <fcntl.h> 
#include <sys/uio.h> 

long vmsplice(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags);

描述

vmsplice() 系統呼叫將 iov 描述的 nr_segs 個使用者記憶體範圍對映到管道中。檔案描述符 fd 必須引用一個管道。

指標 iov 指向一個 iovec 結構陣列,如 <sys/uio.h> 中定義。

struct iovec {
    void  *iov_base;            /* Starting address */
    size_t iov_len;             /* Number of bytes */
};

flags 引數是一個位掩碼,由將以下值中的零個或多個值進行按位或運算組成

標籤描述
SPLICE_F_MOVE 對於 vmsplice() 未使用;請參閱 splice(2)。
SPLICE_F_NONBLOCK 在 I/O 上不阻塞;有關更多詳細資訊,請參閱 splice(2)。
SPLICE_F_MORE 目前對 vmsplice() 沒有影響,但將來可能會實現;請參閱 splice(2)。
SPLICE_F_GIFT 使用者頁面是送給核心的禮物。應用程式絕不能修改此記憶體,否則頁面快取和磁碟上的資料可能會不同。將頁面贈送給核心意味著隨後的 splice() SPLICE_F_MOVE 可以成功移動這些頁面;如果未指定此標誌,則隨後的 splice() SPLICE_F_MOVE 必須複製這些頁面。資料還必須在記憶體和長度方面正確地對齊頁面。

返回值

成功完成後,vmsplice() 返回傳輸到管道的位元組數。發生錯誤時,vmplice() 返回 -1,並設定 errno 以指示錯誤。

錯誤

標籤描述
EBADF fd 無效或不引用管道。
EINVAL nr_segs 為 0 或大於 IOV_MAX; 或如果設定了 SPLICE_F_GIFT,則記憶體未對齊。
ENOMEM 記憶體不足。

備註

在傳遞的段數限制方面,vmsplice() 遵循其他向量化讀/寫型別函式。此限制為 <limits.h> 中定義的 IOV_MAX。在撰寫本文時,該限制為 1024。

歷史

vmsplice(2) 系統呼叫首次出現在 Linux-2.6.17 中。

符合標準

此係統呼叫是 Linux 特定的。

參見



previous next Printer Friendly

廣告


  

廣告



廣告