UNIX和WINSOCK提供了不同的實現方法UNIX系統下,使用writev,可以指定一系列的緩衝區,收集要寫的數據,使可以安排數據保存在多個緩衝區中,然後同時寫出去,從而避免出現Nagle和延遲ACK算法的相互影響。
#include <sys/uio.h>
ssize_t writev( int fd, const struct iovec *iov, int cnt );
ssize_t readv( int fd, const struct iovec *iov, int cnt );
返回值:傳輸字節數,出錯時返回-1.
參數說明:
iov是一組iovec結構的指針,iovec結構如下:
struct iovec {
char *iov_base; /*基本地址指針,指向緩衝區*/
size_t iov_len; /*指定緩衝區長度*/
};
說明:這個定義取自FreeBSD系統,許多系統現在定義基本地址指針為void *iov_base;
cnt是數組中iovec結構的個數,即分開緩衝區的個數。
這兩個函式可以用於套接字及任何類型的檔案描述符。
示例:
#include <sys/uio.h>
int main( int argc, char **argv )
{
SOCKET s;
int n;
char buf[ 128 ];
struct iovec iov[ 2 ];
INIT();
/*socket部分略去*/
/*writev調用指定iov參數指向的結構為const變數,即iov數組不會被writev調用改變,程式可以在循環外設定結構的大多數域*/
iov[ 0 ].iov_base = ( char * )&n;
iov[ 0 ].iov_len = sizeof( n );
iov[ 1 ].iov_base = buf;
while ( fgets( buf, sizeof( buf ), stdin ) != NULL )
{
iov[ 1 ].iov_len = strlen( buf );
n = htonl( iov[ 1 ].iov_len );
if ( writev( s, iov, 2 ) < 0 )
error( 1, errno, "writev failure" );
}
EXIT( 0 );
}
程式說明,用第二項讀取輸入的數據,第一行記錄讀取數據的長度,並將其轉換為網路位元組序,將這兩項同時通過套接字傳送至對等方。
Winsock中類似函式
#include <winsock2.h>
int WSAAPI WSAsend( SOCKET s, LPWSABUF buf, DWORD cnt, LPDWORD sent, DWORD flags, LPWSAOVERLAPPED ov1, LPWSAOVERLAPPED_COMPLETION_ROUTINE func );
返回值:成功返回0,否則返回 SOCKET_ERROR
最後兩個參數用於重疊I/O,buf指向WSABUF數據結構,作用和writev中的iovec結構相似
typedef struct _WSAVUF {
u_long len; /*buffer 長度*/
char FAR* buf; /*指向buffer的指針*/
} WSABUF, FAR* LPWSABUF;
如果調用成功返回,參數sent就指向所包含傳送位元組數目的一個DWORD變數。
相關詞條
-
writev
writev,將多個數據存儲在一起,將駐留在兩個或更多的不連線的緩衝區中的數據一次寫出去。
-
iovec
接收的數據或是writev將要傳送的數據。 成員iov_len確定... writev(int fd, const struct iovec...的向量元素個數。返回值readv所讀取的位元組數或writev所寫入...
簡介 所在頭檔案 成員解釋 readv和wirtev 所在頭檔案 -
系統調用
檔案write 寫檔案readv 從檔案讀入數據到緩衝數組中writev...
系統調用簡介 系統調用原理 系統調用接口 系統調用和普通調用的區別 -
Linux網路編程
內容簡介linux是目前最流行的開源作業系統,網路功能在linux下占有核心的地位。本書循序漸進地從套用層到linux核心、從基...
內容簡介 作者簡介 目錄 -
UNIX網路編程:套接字聯網API
圖書信息出版社: 人民郵電出版社; 第1版 (2010年7月1日) 外文書名: UNIX Network Progra...
圖書信息 作者簡介 內容簡介 媒體評論 目錄 -
高級UNIX編程
pread和pwrite系統調用 2.15 readv和writev...
圖書信息 作者簡介 內容簡介 目錄 -
Lighttpd源碼分析
方式 405 11.2.3 readv/writev數據讀寫傳輸方式...
圖書信息 作者自序 圖書目錄 -
UNIX網路編程與標準開發
基本信息原書名:Unix Network Programming, Volume 1: The Sockets Netwo...
基本信息 編輯推薦 內容簡介 目錄 前言 -
UNIX環境高級編程與開發
基本信息原書名:Advanced Programming in the UNIX Environment 原出版社: ...
基本信息 內容簡介 作譯者 目錄