簡介
I/O vector,與readv和wirtev操作相關的結構體。
所在頭檔案
#include
/* 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和wirtev
read和write的衍生函式,readv和wirtev可以在一個原子操作中讀取或寫入多個緩衝區。
所在頭檔案
#include
原型
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
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;
}