C言語システムコール-readv

readvシステムコール

概要

readvは複数のバッファを使用する読み込みを行います。

readを複数のバッファ指定できるように機能拡張されたシステムコールといえます。


固定文字列長データに対してパース処理を省きたい場合などに利用できます。


サンプルプログラム


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/uio.h>

/*!
 * @brief     sample
 * @return    0:success/-1:failure
 */
static int
sample_func(void)
{
    int rc = 0;
    char buf1[4];
    char buf2[6];
    char buf3[8];
    struct iovec vector[3];

    vector[0].iov_base = buf1;
    vector[0].iov_len = sizeof(buf1);
    vector[1].iov_base = buf2;
    vector[1].iov_len = sizeof(buf2);
    vector[2].iov_base = buf3;
    vector[2].iov_len = sizeof(buf3);

    rc = readv(0, vector, 3);
    if(rc < 0){
        printf("Error: readv() %s\n", strerror(errno));
        return(-1);
    }

    printf("buf1=%s\n", buf1);
    printf("buf2=%s\n", buf2);
    printf("buf3=%s\n", buf3);

    return(0);
}

int
main(int argc, char *argv[])
{
    int rc = 0;

    if(argc != 1){
        fprintf(stderr, "Usage: %s\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    rc = sample_func();
    if(rc != 0) exit(EXIT_FAILURE);

    exit(EXIT_SUCCESS);
}


関連ページ