linux内核,输入输出问题

遇到了一段代码,目前我不能理解这段代码的作用,并且它好像也不能正常运行。
能不能帮我修一下bug。
方便的话简单分析一下这个代码的作用,原理!
谢谢,十分感谢。

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/uio.h>

int main() {
    char love[12] = {0}, hello[13] = { 0 }, test[13] = { 0 };
    struct iovec iov[3];
    ssize_t nr;
    int fd, i;

    fd = open("vectest.txt", O_RDONLY);

    iov[0].iov_base = love;
    iov[0].iov_len = 12;
    iov[1].iov_base = hello;
    iov[1].iov_len = 13;
    iov[2].iov_base = test;
    iov[2].iov_len = sizeof(test);

    nr = readv(fd, iov, 3);

    for (i = 0; i < 3; i++) {
        printf("%d: %s\n", i, (char*)iov[i].iov_base);
    }

    return 0;
}

struct iovec定义了一个向量元素。通常,这个结构用作一个多元素的数组。对于每一个传输的元素,指针成员iov_base指向一个缓冲区,这个缓冲区是存放的是readv所接收的数据或是writev将要发送的数据。成员iov_len在各种情况下分别确定了接收的最大长度以及实际写入的长度。

可以参考这篇文章 https://www.cnblogs.com/zl1991/p/7268930.html