Поток связи через printf и scanf (linux) - PullRequest
1 голос
/ 30 июня 2011

Работа в Linux и использование C ++. У меня есть программа, которая инициирует поток. Мне нужен основной поток и дочерний поток для связи через printf и scanf (код для обоих потоков использует scanf и printf и предполагает, что он связывается с stdin и stdout. Я должен сохранить это так). Мне удалось переопределить printf и scanf, так что я имею полный контроль над этими функциями (и я могу определить вызывающий поток, используя * pthread_self *).

Осталось создать 2 файловых дескриптора, по одному для каждого направления сообщения, и буферизовать сообщение. Как это можно сделать?

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

В частности, важно, что если один поток вызывает scanf ("% s", & x) , то он будет заблокирован, пока другой поток не напишет некоторую строку , а не добавит пробел (поэтому строка не читается до того, как полностью написана).

1 Ответ

2 голосов
/ 30 июня 2011

Вы можете использовать трубы. http://linux.die.net/man/2/pipe. Вы можете просто перенаправить stdout и stdin вместо переопределения printf и scanf. Будьте осторожны, так как printf и scanf не являются повторными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...