readv 函数和 writev 函数
readv
函数将数据从文件描述符读到分散的内存块中,即分散读;
writev
函数则将多块分散的内存数据一并写人文件描述符中,即集中写。它们的定义如下:
1 |
|
fd
被操作的目标文件描述符。
iov
是 iovec
类型的数组,在 recvmsg
和 sendmsg
中接触过。
iovcnt
是 iov
数组的长度。
iovec
结构体封装了一块内存的起始位置和长度。
1 | struct iovec { /* Scatter/gather array items */ |
readv
和 writev
在成功时返回读出 / 写入 fd
的字节数,失败则返回 - 1 并设置 errno。
readv
和 writev
是个非常有用的函数。比如:当 Web 服务器解析完一个 HTTP 请求之后,如果目标文档存在且客户具有读取该文档的权限,那么它就需要发送一个 HTTP 应答来传输该文档。这个 HTTP 应答包含 1 个状态行、多个头部字段、1 个空行和文档的内容。其中,前 3 部分的内容可能被 Web 服务器放置在一块内存中,而文档的内容则通常被读入到另外一块单独的内存中(通过 read 函数或 mmap 函数)。我们并不需要把这两部分内容拼接到一起再发送,而是可以使用 writev 函数将它们同时写出。
举一个 man 手册上 writev
函数的例子
1 |
|
未找到相关的 Issues 进行评论
请联系 @bugcat9 初始化创建