iovec
基本介绍
- 外文名:iovec
- 隶属:数学
- 定义:readv和wirtev操作相关的结构体
- 相关:readv和writev函式
一次函式简介
I/O vector,与readv和wirtev操作相关的结构体。readv和writev函式用于在一次函式调用中读、写多个非连续缓冲区。有时也将这两个函式称为散布读(scatter read)和聚集写(gather write)。
所在头档案
#include <sys/uio.h>/* Structure for scatter/gather I/O. */struct iovec{ void *iov_base; /* Pointer to data. */ size_t iov_len; /* Length of data. */};
成员解释
成员iov_base指向一个缓冲区,这个缓冲区是存放readv所接收的数据或是writev将要传送的数据。
成员iov_len确定了接收的最大长度以及实际写入的长度。
readv和writev
read和write的衍生函式,readv和writev可以在一个原子操作中读取或写入多个缓冲区。
所在头档案
#include <sys/uio.h>
readv和writev函式原型
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
参数
fd是要在其上进行读或是写的档案描述符;
iov是读或写所用的I/O向量;
iovcnt是要使用的向量元素个数。
返回值
readv所读取的位元组数或writev所写入的位元组数;
如果有错误发生,就会返回-1,错误代码存在errno中。
使用iovec和writev的例子
/** 将三个独立的字元串一次写入终端。** */#include <sys/uio.h>int main(int argc,char **argv){ char part1[] = "This is iov"; char part2[] = " and "; char part3[] = " writev test"; struct iovec iov[3]; iov[0].iov_base = part1; iov[0].iov_len = strlen(part1); iov[1].iov_base = part2; iov[1].iov_len = strlen(part2); iov[2].iov_base = part3; iov[2].iov_len = strlen(part3); writev(1,iov,3); return 0;}