@Badananas

Каков принцип взаимодействия stream с программой?

Доброго времени суток!
Хотелось бы узнать принцип работы stream с точки зрения взаимодействия программы с внешними источниками(клавиатура/сеть). При изучении темы все статьи с которыми имел дело были максимально поверхностны и рассказывали исключительно о концептуальном представлении потока, а о его работе как таковой ни слова.
Предыдущий вопрос удалили по причине отсутствия конкретики хотя куда конкретнее непонятно.
В качестве конкретики было бы здорово услышать в контексте c++ iostream, но предполагаю общий принцип взаимодействия един. если это не так буду рад узнать об отличиях.
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
iostream - лишь обертка над системными вызовами. Входной и выходной потоки - это концепция системы.

Это целый набор шаблонных классов, которые переопределяют операции побитового сдвига, поэтому у вас в программе используются << и >>. Под капотом это все доходит до системных вызовов, которые пишут или читают данные в системные потоки (pipe). Там тупо команды "запиши вот эти байты" и "отдай мне вот в этот буфер максимум столько-то байт".

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

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

ОС-ка поддерживает список потоков, которые ждут чтения из каждого буфера. Когда что-то в буфер записывается, эти потоки просыпаются.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы