常用函数的用法

常用函数的用法,第1张

nginx中writev函数的使用

NGX的编码很优秀。之前详细介绍了sendfile的应用,完成“运行内存零拷贝”。今天学习了writev函数的应用。以nginx-1.6.0为例,在src/os/ss="superseo">ss="superseo">unix/ngx_writev_chain.c的第113行,如下图:

Man2writev可以看看函数的概念(还有一个readv对应writev)。Writev加载几个不连续的缓冲区,然后集中加载。

#include <sys/uio.h>       ssize_t readv(int fd, const struct iovec *vector, int count);       ssize_t writev(int fd, const struct iovec *vector, int count);

如何收尾?

#include <stdio.h> #include <fcntl.h> #include <sys/uio.h> int main(int argc,char *argv[]) {         int fd1,fd2,fd3;         ssize_t size;         char buf1,buf2[9];         struct iovec iov[2];         fd1=open(argv[1],O_RDONLY);         fd2=open(argv[2],O_RDONLY);         fd3=open(argv[3],O_RDWR);         size=read(fd1,buf1,sizeof(buf1));         printf("%s size is : %d\n",argv[1],size);         size=read(fd2,buf2,sizeof(buf2));         printf("%s size is : %d\n",argv[2],size);         iov[0].iov_base=buf1;         iov[0].iov_len=sizeof(buf1);         iov[1].iov_base=buf2;         iov[1].iov_len=sizeof(buf2);         size=writev(fd3,iov,2);         printf("%s size is :%d\n",argv[3],size);         close(fd1);         close(fd2);         close(fd3); }

首先,建立三个文档,文件1(9字节)、文件2(9字节)和文件3(空文档)。程序流从文件1和文件1中读取缓冲区,然后将几个缓冲区加载到新的fd中。

编译程序并测试它。

[9]

writev和write函数的区别取决于几个非持久缓冲区的加载。当负载较重时,它可以很好地反映功能的实际效果。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/784433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存