/* 结构体名:iovec 名称含义:I/O向量 所在头文件:#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和wirtev是read和write的衍生函数(v是vector的意思),readv和wirtev可以再一个
原子操作中读取或写入多个缓冲区。
头文件:#include <sys/uio.h>
原型:
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中。
例子:
/* * 将三个独立的字符串一次写入终端。
* * */
#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; }
*/ |