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

广告


  

广告



广告