Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 什么是ITER_IOVEC、ITER_KVEC和ITER_BVEC?_Linux_Linux Kernel_Linux Device Driver - Fatal编程技术网

Linux 什么是ITER_IOVEC、ITER_KVEC和ITER_BVEC?

Linux 什么是ITER_IOVEC、ITER_KVEC和ITER_BVEC?,linux,linux-kernel,linux-device-driver,Linux,Linux Kernel,Linux Device Driver,我正在寻找最近Linux内核的内核代码。在uio.h中,我看到了以下定义 ITER_IOVEC = 0, ITER_KVEC = 2, ITER_BVEC = 4, 我在网上搜索了它的意思,也看到了文档,但没有发现任何有趣的东西 有人知道这些常数的含义是什么,它们之间有什么区别吗 有人知道这些常数的含义是什么,它们之间有什么区别吗 实际上,您应该看看uio.h中下面的几行: struct iov_iter { int ty

我正在寻找最近Linux内核的内核代码。在uio.h中,我看到了以下定义

          ITER_IOVEC = 0,
          ITER_KVEC = 2, 
          ITER_BVEC = 4, 
我在网上搜索了它的意思,也看到了文档,但没有发现任何有趣的东西

有人知道这些常数的含义是什么,它们之间有什么区别吗

有人知道这些常数的含义是什么,它们之间有什么区别吗

实际上,您应该看看uio.h中下面的几行:

struct iov_iter {
    int type;
    size_t iov_offset;
    size_t count;
    union {
        const struct iovec *iov;
        const struct kvec *kvec;
        const struct bio_vec *bvec;
        struct pipe_inode_info *pipe;
    };
    union {
        unsigned long nr_segs;
        int idx;
    };
};
这些常量允许使用不同的迭代器来处理数据缓冲区(可能分为多个块)

ITER_IOVEC
用于迭代由
writev/readv
函数提供的缓冲区,
ITER_-KVEC
的作用几乎相同,但使用内核空间中的数据,并使用
ITER_-KVEC
处理部分内存映射页

您可以在上找到详细信息,不要错过评论