Я пытаюсь найти лучшее решение для неблокирующего ввода-вывода через stdin / stdout со следующими характеристиками:
- До тех пор, пока данных достаточно, читайте куски n .
- Если данных недостаточно, считайте частичный фрагмент.
- Если данных нет, блокируйте их, пока они не появятся (хотя они могут быть меньше, чем n ).
Цель состоит в том, чтобы обеспечить эффективную передачу больших наборов данных при немедленной обработке «контрольных» кодов (вместо того, чтобы задерживать их в каком-то частично заполненном буфере где-либо).
Я знаю, что могу добиться этого, используя потоки и цикл istream :: get (), или написав кучу специфичного для платформы кода (поскольку вы не можете выбрать () для дескрипторов файлов в окнах) ... ((Существует также функция istream :: readsome (), которая выглядит многообещающей, но единственные результаты, которые я могу найти в Google, - это люди, которые говорят, что это на самом деле не работает.))
Поскольку я не слишком много программировал с этими API, возможно, есть лучший способ.