LINUX.ORG.RU

История изменений

Исправление gaylord, (текущая версия) :

Буквально вот:

#include <err.h>
#include <liburing.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
	struct io_uring_cqe *cqe;
	struct io_uring ring;
	char buf[32] = {};
	int ret;

	ret = io_uring_queue_init(2, &ring, 0);
	if (ret)
		errx(1, "cannot init io_uring ring: %s", strerror(-ret));

	for (;;) {
		io_uring_prep_read(io_uring_get_sqe(&ring), STDIN_FILENO, buf, sizeof(buf), 0);

		ret = io_uring_submit_and_wait(&ring, 1);
		if (ret < 0)
			errx(1, "cannot submit SQEs: %s", strerror(-ret));

		io_uring_wait_cqe(&ring, &cqe);
		if (cqe->res < 0)
			errx(1, "cannot read: %s", strerror(-ret));

		io_uring_cqe_seen(&ring, cqe);

                io_uring_prep_write(io_uring_get_sqe(&ring), STDOUT_FILENO, buf,
                                    sizeof(buf), 0);

                ret = io_uring_submit_and_wait(&ring, 1);
		if (ret < 0)
			errx(1, "cannot submit SQEs: %s", strerror(-ret));

		io_uring_wait_cqe(&ring, &cqe);
		if (cqe->res < 0)
			errx(1, "cannot write: %s", strerror(-ret));

		io_uring_cqe_seen(&ring, cqe);
        }

	return 0;
}

Исправление gaylord, :

Буквально вот:

#include <err.h>
#include <liburing.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
	struct io_uring_cqe *cqe;
	struct io_uring ring;
	char buf[32 + 1] = {};
	int ret;

	ret = io_uring_queue_init(2, &ring, 0);
	if (ret)
		errx(1, "cannot init io_uring ring: %s", strerror(-ret));

	for (;;) {
		io_uring_prep_read(io_uring_get_sqe(&ring), STDIN_FILENO, buf, sizeof(buf) - 1, 0);

		ret = io_uring_submit_and_wait(&ring, 1);
		if (ret < 0)
			errx(1, "cannot submit SQEs: %s", strerror(-ret));

		io_uring_wait_cqe(&ring, &cqe);
		if (cqe->res < 0)
			errx(1, "cannot read: %s", strerror(-ret));

		io_uring_cqe_seen(&ring, cqe);

                io_uring_prep_write(io_uring_get_sqe(&ring), STDOUT_FILENO, buf,
                                    sizeof(buf), 0);

                ret = io_uring_submit_and_wait(&ring, 1);
		if (ret < 0)
			errx(1, "cannot submit SQEs: %s", strerror(-ret));

		io_uring_wait_cqe(&ring, &cqe);
		if (cqe->res < 0)
			errx(1, "cannot write: %s", strerror(-ret));

		io_uring_cqe_seen(&ring, cqe);
        }

	return 0;
}

Исходная версия gaylord, :

Буквально вот:

#include <err.h>
#include <liburing.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
	struct io_uring_cqe *cqe;
	struct io_uring ring;
	char buf[32 + 1] = {};
	int ret;

	ret = io_uring_queue_init(2, &ring, 0);
	if (ret)
		errx(1, "cannot init io_uring ring: %s", strerror(-ret));

	for (;;) {
		io_uring_prep_read(io_uring_get_sqe(&ring), STDIN_FILENO, buf, sizeof(buf) - 1, 0);

		ret = io_uring_submit_and_wait(&ring, 1);
		if (ret < 0)
			errx(1, "cannot submit SQEs: %s", strerror(-ret));

		io_uring_wait_cqe(&ring, &cqe);
		if (cqe->res < 0)
			errx(1, "cannot read: %s", strerror(-ret));

		io_uring_cqe_seen(&ring, cqe);

                io_uring_prep_write(io_uring_get_sqe(&ring), STDOUT_FILENO, buf,
                                    sizeof(buf), 0);

                ret = io_uring_submit_and_wait(&ring, 1);
		if (ret < 0)
			errx(1, "cannot submit SQEs: %s", strerror(-ret));

		io_uring_wait_cqe(&ring, &cqe);
		if (cqe->res < 0)
			errx(1, "cannot write: %s", strerror(-ret));

		io_uring_cqe_seen(&ring, cqe);
        }

	return 0;
}