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

    */
  • 相关阅读:
    KMP算法的Next数组详解(转)
    公开封尘已久的即时通讯源码(转)
    《C语言编写 学生成绩管理系统》
    随想录(从编程语言到库、框架、软件)
    Effective Objective-C 2.0 笔记三(Literal Syntax简写语法)
    Java Swing 探索(一)LayoutManager
    Codeforces Round #FF 446 C. DZY Loves Fibonacci Numbers
    ARM体系结构与编程
    div:给div加滚动栏 div的滚动栏设置
    DS18B20
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2685542.html
Copyright © 2011-2022 走看看