zoukankan      html  css  js  c++  java
  • 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;
    }

    */
  • 相关阅读:
    第二个冲刺
    实验四主存空间的分配和回收
    Sprint总结
    Sprint回顾
    Scrum项目5.0
    hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期,页面直接得到格式化类型的值
    获得HttpServletResponse及其他对象
    UUID.randomUUID()方法介绍
    psp个人软件过程需求文档
    电子产品自动搜索比价系统设计与实现 项目愿景与范围
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2685542.html
Copyright © 2011-2022 走看看