Как вы читаете из ifstream асинхронно в C ++? - PullRequest
0 голосов
/ 05 мая 2020

ifstream читает из канала UNIX, в настоящее время связь осуществляется путем отправки сигнала в приложение для чтения, но я хотел бы избавиться от сигналов и использовать правильный asyn c io.

В C я бы использовал функцию select () с таймаутом, чтобы я мог немедленно реагировать, когда есть что прочитать, и ждать ввода-вывода в противном случае.

В C ++ я не могу получить доступ fd файла, поэтому я не могу использовать select (). Какой самый разумный подход к этому? Должен ли я использовать какую-то библиотеку Boost или это можно сделать с помощью стандартных библиотек C ++?

1 Ответ

1 голос
/ 05 мая 2020

std::ifstream не поддерживает асинхронные операции, он предназначен для синхронного ввода-вывода. Вы можете построить вокруг него асинхронный c ввод-вывод, используя дополнительные потоки и очередь ввода-вывода, но в целом это не очень хорошая идея из соображений эффективности.

Для асинхронного ввода-вывода вы можете посмотреть на Boost. ASIO , в частности его stream_descriptor, который может использоваться для принятия произвольных дескрипторов потоковых файлов, таких как каналы.

...