1. 程式人生 > 其它 >io_uring介面(函式)使用簡介

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);