io_uring接口(函数)使用简介
内核接口,自带系统调用函数封装:
#include <linux/io_uring.h>
int io_uring_setup(u32 entries, struct io_uring_params *p);
int io_uring_register(unsigned int fd, unsigned int opcode,
void *arg, unsigned int nr_args);
int io_uring_enter(unsigned int fd, unsigned int to_submit,
unsigned int min_complete, unsigned int flags,
sigset_t *sig);
用户接口,没有函数接口,需要自己封装系统调用:
#include <linux/io_uring.h>
int io_uring_setup(unsigned entries, struct io_uring_params *p)
{
return (int)syscall(__NR_io_uring_setup, entries, p);
}
int io_uring_enter(int ring_fd, unsigned int to_submit,
unsigned int min_complete, unsigned int flags)
{
return (int)syscall(__NR_io_uring_enter, ring_fd, to_submit, min_complete,
flags, NULL, 0);
}
int io_uring_enter(unsigned int fd, unsigned int to_submit,
unsigned int min_complete, unsigned int flags,
sigset_t *sig)
{
return (int)syscall(__NR_io_uring_register, fd, to_submit, min_complete,
flags, sig, NULL, 0);
}
liburing库,通过它自己实现的syscall再封装系统调用:
int io_uring_queue_init_params(unsigned entries, struct io_uring *ring,
struct io_uring_params *p);
int io_uring_queue_init(unsigned entries, struct io_uring *ring,
unsigned flags);
/* more interface had be provided */
void io_uring_queue_exit(struct io_uring *ring);