最近我试图弄清楚 liburing 是一个简单的 io-uring 接口。当我测试这个link-cp.c
例子时,
- 我不知道函数会做什么
handle_cqe
。 if (data->index == 2)
是真的,为什么它会释放那个指针。- struct io_data 中的索引是什么意思。这是代码的一部分。
struct io_data {
size_t offset;
struct iovec iov;
int index; // question 3)
};
static int handle_cqe(struct io_uring *ring, struct io_uring_cqe *cqe) //question 1)
{
struct io_data *data = (struct io_data *)io_uring_cqe_get_data(cqe);
int ret = 0;
data->index++;
if (cqe->res < 0) {
if (cqe->res == -ECANCELED) {
queue_rw_pair(ring, BS, data->offset);
inflight += 2;
} else {
printf("cqe error: %s\n", strerror(-cqe->res));
ret = 1;
}
}
if (data->index == 2) { // question 2)
void *ptr = (void *) data - data->iov.iov_len;
free(ptr);
}
io_uring_cqe_seen(ring, cqe);
return ret;
}