其中fd為乙個檔案描述符,vector為乙個陣列,陣列中每個元素都包含了乙個位址和乙個偏移量,count表示陣列的個數;
以下**:
服務端利用writev()
從乙個stadus_line
陣列和另外乙個本地檔案讀取檔案,併發送到客戶端;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define buffer_size 1024
static
const
char
* status_line[2]
=;intmain
(int argc,
char
*ar**)
const
char
*ip=ar**[1]
;int port=
atoi
(ar**[2]
);const
char
* file_name=ar**[3]
;struct sockaddr_in address;
bzero
(&address,
sizeof
(address));
address.sin_family=af_inet;
address.sin_port=
htons
(port)
;inet_pton
(af_inet,ip,
&address.sin_addr)
;int sock=
socket
(pf_inet,sock_stream,0)
;assert
(sock>=0)
;int ret=
bind
(sock,
(struct sockaddr*
)&address,
sizeof
(address));
assert
(ret!=-1
);ret=
listen
(sock,5)
;assert
(ret!=-1
);struct sockaddr_in client;
socklen_t length=
sizeof
(client)
;int confd=
accept
(sock,
(struct sockaddr*
)&client,
&length);if
(confd<0)
else
else
else
if( file_stat.st_mode & s_iroth )
//其他使用者可讀?
}else}if
(valid)
else
close (confd)
;delete
file_buf;
}close
(sock)
;return0;
}
客戶端的輸出:
高效能伺服器程式設計
nginx中writev函式的使用
nginx 非常的優秀,之前已經介紹了sendfile的使用來實現 記憶體零拷貝 今天我又理解了一下writev函式的使用,以nginx 1.6.0為例,在src os unix ngx writev chain.c的113行,如下圖 可以man 2 writev看下函式的概念 與writev相對應...
nginx中writev函式的使用
nginx的 非常的優秀,之前已經介紹了sendfile的使用來實現 記憶體零拷貝 今天我又理解了一下writev函式的使用,以nginx 1.6.0為例,在src os unix ngx writev chain.c的113行,如下圖 可以man 2 writev看下函式的概念 與writev相對...
高階I O之readv和writev函式
readv和writev函式用於在一次函式呼叫中讀 寫多個非連續緩衝區。有時也將這兩個函式稱為散布讀 scatter read 和聚集寫 gather write include ssize t readv int filedes,const struct iovec iov,int iovcnt ...