Здравствуйте, niko715, Вы писали:
N>Дело в том, что мне нужно отследить,что поступление данных окончилось или прервалось.Ждать какогото символа — никанает, т.к. входным потоком этой тулзы могет являтся выходной поток какойнить предыдущей.
N>Напр:командная строка Far: type Предыдущий.txt > Эта_Тулза.exe
Тут есть 3 принципиально разных режима
— интерактивное чтение с консоли (вольны реализовать как угодно; обычно чтение построчное)
— чтение из потока (таймаутов быть не может, только конец файла; чтение строго посимвольное)
— чтение из pipe (в принципе, могут быть и таймауты)
Сишный рантайм реализует потоковые функции так, что они внутри себя различают — консоль это или нет. _isatty(_fileno(stdin)).
Никто (кроме лени) не мешает тебе вручную сделать собственный шелл с любым необходимым поведением — например, мгновенным вводом или ожиданием нужного количества символов.
Правда, вламываться в сишный рантайм — мучительно и непортабельно. (Можешь ради интереса хакнуть структуру FILE у stdin).
Проще написать собственный наследник std::streambuf и подсунуть его std::istream'у (хоть самому std::cin'у).
После чего все высокоуровневые функции ввода будут проходить через твои ручки, а ты уже с консолью напрямую вытворяй что хочешь.
(Если хочешь вытворять кроссплатформенно, то лучше делать это с помощью ***curses, но можно и прямо на Console API).
... << RSDN@Home 1.2.0 alpha 4 rev. 1207>>