0

最近我试图弄清楚 liburing 是一个简单的 io-uring 接口。当我测试这个link-cp.c例子时,

  1. 我不知道函数会做什么handle_cqe
  2. if (data->index == 2)是真的,为什么它会释放那个指针。
  3. 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;
}
4

0 回答 0