基本介紹
- 外文名: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;}