iovec

基本介紹

  • 外文名:iovec
  • 隸屬:數學
  • 定義:readv和wirtev操作相關的結構體
  • 相關:readv和writev函式
一次函式簡介,所在頭檔案,成員解釋,readv和writev,所在頭檔案,readv和writev函式原型,參數,返回值,使用iovec和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;}

相關詞條

熱門詞條

聯絡我們