io_uring介面(函式)使用簡介
阿新 • • 發佈:2022-05-30
核心介面,自帶系統呼叫函式封裝:
#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);