Чтение и запись одновременно из именованного канала в C++Linux

Ответить Пред. темаСлед. тема
Anonymous
 Чтение и запись одновременно из именованного канала в C++

Сообщение Anonymous »


У меня есть процесс 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 асинхронное чтение под названием
.
.
.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»