linux内核数据结构--struct iov_iter

内核中很多地方都用到了这个数据结构,它主要用于处理一个或多个数据块。

结构体定义

struct iov_iter {
	u8 iter_type;
	bool nofault;
	bool data_source;
	size_t iov_offset;
	size_t count;
	union {
		const struct iovec *iov;
		const struct kvec *kvec;
		const struct bio_vec *bvec;
		struct xarray *xarray;
		struct pipe_inode_info *pipe;
	};
	union {
		unsigned long nr_segs;
		struct {
			unsigned int head;
			unsigned int start_head;
		};
		loff_t xarray_start;
	};
};

iter_type

表明当前的数据块类型, 这个结构支持各种类型的数据块(ITER_IOVEC、
ITER_KVEC、ITER_BVEC、ITER_PIPE、ITER_XARRAY)

nofault

处理页数据块时的一个标志位。

data_source

表示数据的方向,即write/read, 是从当前结构的用户的角度来说的,比如:当udp
socket发送数据到内核,需要将数据copy到这个结构中,就是write.

iov_offset

多个数据块是存放在一个指针数组是的,数组的一个元素指向一个数据块,而iov_offset就是数组第一个元素指向的数据块中的偏移。

iov

结构体指针数组,数组每一个元素指向一个struct iovec结构体,这是联合体的一个成员,其它几个也是类似,与iter_type对应。

nr_segs

指示上述数组的大小,也是一个联合体成员,另外两个分别对应ITER_PIPE、ITER_XARRAY两种类型的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值