LINUX.ORG.RU

Как мне асинхронно считать из файла?


0

2

Всем привет. Пытаюсь сделать асинхронное чтение из файла. Пишу типа

int fd_flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, fd_flags | O_NONBLOCK);

В итоге когда делаю read то он считывает сразу, а мне надо его потом select'ом выбырать. Никто такое не делал?

Ответ на: комментарий от sn1ln

Может через sendfile() ?

sendfile нужен для того, чтобы перебросить в неизменном виде поток данных с одного дескриптора на другой. Если нужно считать и разобрать данные, то непонятно как он может помочь.

pathfinder ★★★★
()

Можно более подробно - что хочет ТС? Я так и не понял.

pathfinder ★★★★
()

Ну, дык, не читай перед селектом.

baverman ★★★
()

Селект не поможет. Обычные файлы всегда доступны на чтение, а read всегда читает сколько запрошено, даже если это приводит к блокированию процесса.

const86 ★★★★★
()
Ответ на: комментарий от true_admin

nginx не с файлами работает, а с сокетами, aio там не используется, а используются обычные механизмы неблокирующих сокетов + epoll/kqueue

Reset ★★★★★
()
Ответ на: комментарий от const86

Селект не поможет.

на сколько я понимаю, большинство aio-библиотек запускают отдельный тред на чтение который «взводит» дескриптор когда доступны данные. Поэтому это не проблема. Разница лишь в том где этот тред находится. Если со стороны библиотеки то это userspace-реализация, а если в ядре то нативная. В линухе, на сколько знаю, есть и такие и такие решения.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

> на сколько я понимаю, большинство aio-библиотек запускают отдельный тред на чтение который «взводит» дескриптор когда доступны данные.

Не знаю, как большинство, а посиксная и линуксовая aio используют собственные механизмы уведомления о завершении операции. В евентлуп с селектом оба вкручиваются, но не тривиально.

const86 ★★★★★
()
Ответ на: комментарий от const86

используют собственные механизмы уведомления

ужасно. видимо, я с чем-то перепутал.

true_admin ★★★★★
()
Ответ на: комментарий от koirn

А в libevent нет примеров того что вам надо? Вроде они ее так активно разрабатывают.

sn1ln
()

Всем спасибо огромное. Пойду смотреть.

facelift
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.