Linux的iovec、readv和writev
阿新 • • 發佈:2019-01-13
iovec
struct iovec {
void *iov_base; /* Starting address */
size_t iov_len; /* Number of bytes to transfer */
};
用於快速讀取資料的一個位元組塊,指出首地址和位元組塊的長度即可。
readv 和 writev
ssize_t readv(int fd, const struct iovec *iov, int iovcnt); // 從fd讀取資料
ssize_t writev(int fd, const struct iovec * iov, int iovcnt); // 向fd寫入資料
fd
是檔案描述符,iov
是佇列的隊首指標,iovcnt
是佇列的長度。返回讀寫的位元組數或者錯誤返回-1.
簡單程式碼示例:
#include <stdio.h>
#include <stdlib.h>
#include <sys/uio.h>
#include <string.h>
#define BUFFER_SIZE 1024
int main(int argc, char* argv[]) {
if (argc != 3) {
printf("usage: %s <your string data> <your string data>\n" , argv[0]);
return -1;
}
iovec iov[2];
bzero(iov, 2 * sizeof(iovec));
iov[0].iov_base = argv[1];
iov[0].iov_len = strlen(argv[1]);
iov[1].iov_base = argv[2];
iov[1].iov_len = strlen(argv[2]);
if (writev(1, iov, 2) < 0) { // 向標準輸出輸出字串
perror("writev() error\n");
return - 1;
}
return 0;
}