1. 程式人生 > >Linux的iovec、readv和writev

Linux的iovec、readv和writev

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; }