• c iovec结构体 readv writev


    1
      /*
    结构体名:iovec
    名称含义:I/O向量
    所在头文件:#include <sys/uio.h>
    头文件中的定义:

    /* Structure for scatter/gather I/O.  */
    struct iovec
    {
       void *iov_base;    /* Pointer to data.  */
       size_t iov_len;    /* Length of data.  */
    };

    说明:

    成员iov_base指向一个缓冲区,这个缓冲区是存放readv所接收的数据或是writev将要发送的数据。

    iov_len确定了接收的最大长度以及实际写入的长度。

    readv和wirtev是read和write的衍生函数(v是vector的意思),readv和wirtev可以再一个

    原子操作中读取或写入多个缓冲区。

    头文件:#include <sys/uio.h>

    原型:

    ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

    ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

    参数:

    fd是要在其上进行读或是写的文件描述符;

    iov是读或写所用的I/O向量;
    iovcnt是要使用的向量元素个数。

    返回值:

    readv所读取的字节数或writev所写入的字节数;

    如果有错误发生,就会返回-1,错误代码存在errno中。

    例子:

    /*
    * 将三个独立的字符串一次写入终端。
    *
    * */

    #include <sys/uio.h>
    int main(int argc,char **argv)
    {
        char part1[] = "This is iov";
        char part2[] = " and ";
        char part3[] = " writev test";

        struct iovec iov[3];
        iov[0].iov_base = part1;
        iov[0].iov_len = strlen(part1);
        iov[1].iov_base = part2;
        iov[1].iov_len = strlen(part2);
        iov[2].iov_base = part3;
        iov[2].iov_len = strlen(part3);
        writev(1,iov,3);
        return 0;
    }

    */
  • 相关阅读:
    ID3决策树---Java
    Static、final、abstract、接口、构造方法及java语法总结
    集合类 Collection
    String、StringBuilder
    java基础类:Object类和Math类
    如何快速定位TempDB产生问题
    教你实现图片的惰性加载
    如何在 apache 中开启 gzip 压缩服务
    Data URI 应用场景小结
    获取图片base64编码的几种方法
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2685542.html
Copyright © 2020-2023  润新知