Чтение и запись одновременно из именованного канала в C++ ⇐ Linux
Чтение и запись одновременно из именованного канала в C++
У меня есть процесс A, который непрерывно записывает данные в именованный канал. Он открыл его в O_NONBLOCK | Режим O_RDWR. Другой процесс B непрерывно читает данные из этого канала. Он открыл его в O_NONBLOCK | Режим O_RDONLY.
Обратите внимание, что для всего этого я использую boost::asio::posix::stream_descriptor и async_write (процесс A) и async_read (процесс B).
Теперь моя проблема в том, что B не может читать из канала, пока A не перестанет писать. Я хочу, чтобы это произошло одновременно. Возможность чтения B должна зависеть только от того, присутствуют ли данные или нет. Написание А не должно влиять на это.
Как мне это сделать?
Я пробовал менять режимы открытия файловых дескрипторов, но безрезультатно. Я также попробовал установитьstream_descriptor.non_blocking(true);
Изменить: я создаю процесс B из процесса A, используя
system(command.c_str()); Где команда содержит путь к исполняемому файлу. Кроме того, процесс выполняется в фоновом режиме. Итак, я вхожу в стандартный вывод, когда:
[*]Процесс A вызывает async_write (до); [*]Процесс A вызвал async_write (после); [*]Процесс Выполняется обработчик завершения async_write (внутри него);
Аналогично:
[*]Процесс B вызывается async_read (до); [*]Процесс B, async_read был вызван (после); [*]Обработчик завершения async_read процесса B выполняется (внутри него).
Выход, который я наблюдаю:
B вызов асинхронного чтения
B асинхронное чтение под названием
Асинхронный вызов записи
Асинхронная запись под названием
Асинхронная запись завершена
Асинхронный вызов записи
Асинхронная запись под названием
Асинхронная запись завершена
.
.
.
Асинхронное чтение завершено
B вызов асинхронного чтения
B асинхронное чтение под названием
.
.
.
У меня есть процесс A, который непрерывно записывает данные в именованный канал. Он открыл его в O_NONBLOCK | Режим O_RDWR. Другой процесс B непрерывно читает данные из этого канала. Он открыл его в O_NONBLOCK | Режим O_RDONLY.
Обратите внимание, что для всего этого я использую boost::asio::posix::stream_descriptor и async_write (процесс A) и async_read (процесс B).
Теперь моя проблема в том, что B не может читать из канала, пока A не перестанет писать. Я хочу, чтобы это произошло одновременно. Возможность чтения B должна зависеть только от того, присутствуют ли данные или нет. Написание А не должно влиять на это.
Как мне это сделать?
Я пробовал менять режимы открытия файловых дескрипторов, но безрезультатно. Я также попробовал установитьstream_descriptor.non_blocking(true);
Изменить: я создаю процесс B из процесса A, используя
system(command.c_str()); Где команда содержит путь к исполняемому файлу. Кроме того, процесс выполняется в фоновом режиме. Итак, я вхожу в стандартный вывод, когда:
[*]Процесс A вызывает async_write (до); [*]Процесс A вызвал async_write (после); [*]Процесс Выполняется обработчик завершения async_write (внутри него);
Аналогично:
[*]Процесс B вызывается async_read (до); [*]Процесс B, async_read был вызван (после); [*]Обработчик завершения async_read процесса B выполняется (внутри него).
Выход, который я наблюдаю:
B вызов асинхронного чтения
B асинхронное чтение под названием
Асинхронный вызов записи
Асинхронная запись под названием
Асинхронная запись завершена
Асинхронный вызов записи
Асинхронная запись под названием
Асинхронная запись завершена
.
.
.
Асинхронное чтение завершено
B вызов асинхронного чтения
B асинхронное чтение под названием
.
.
.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Отключение канала RabbitMQ из-за ошибки канала с неизвестным тегом доставки
Anonymous » » в форуме JAVA - 0 Ответы
- 93 Просмотры
-
Последнее сообщение Anonymous
-