nginx**非常的優秀,之前已經介紹了sendfile的使用來實現「記憶體零拷貝」,今天我又理解了一下writev函式的使用,以nginx-1.6.0為例,在src/os/unix/ngx_writev_chain.c的113行,如下圖:
可以man 2 writev看下函式的概念(與writev相對應的還有乙個readv)writev是讀取多個不連續的buffer然後集中寫入。
#include ssize_t readv(int fd, const struct iovec *vector, int count);
ssize_t writev(int fd, const struct iovec *vector, int count);
如何實現
#include #include #include int main(int argc,char *argv)
首先建立3個檔案,file1(9個位元組),file2(9個位元組),file3(空檔案),程式將file1和file1讀入buffer然後將兩段buffer集中寫入新的fd中
編譯測試吧
writev和write函式區別就是在於多個非連續buffer的讀取後寫入,當負載大的時候就可以很好的體現出效能效果了。
nginx中writev函式的使用
nginx的 非常的優秀,之前已經介紹了sendfile的使用來實現 記憶體零拷貝 今天我又理解了一下writev函式的使用,以nginx 1.6.0為例,在src os unix ngx writev chain.c的113行,如下圖 可以man 2 writev看下函式的概念 與writev相對...
writev 函式使用
其中fd為乙個檔案描述符,vector為乙個陣列,陣列中每個元素都包含了乙個位址和乙個偏移量,count表示陣列的個數 以下 服務端利用writev 從乙個stadus line陣列和另外乙個本地檔案讀取檔案,併發送到客戶端 include include include include inclu...
高階I O之readv和writev函式
readv和writev函式用於在一次函式呼叫中讀 寫多個非連續緩衝區。有時也將這兩個函式稱為散布讀 scatter read 和聚集寫 gather write include ssize t readv int filedes,const struct iovec iov,int iovcnt ...