Портативный способ чтения данных из стандартного ввода без блокировки

Есть ли переносимый способ чтения данных из stdin без блокировки или проверки доступности данных для чтения без блокировки? Имейте в виду, что стандартный ввод может быть передан из другого процесса, а не только для ввода с терминала/клавиатуры.

Лучше всего было бы использовать только функцию ANSI C из stdlib.h или stdio.h, но использование функций POSIX также было бы очень переносимым.

Также я не уверен в этом, но есть некоторые сообщения на форуме, где говорится, что select() на практике не работает в Windows.


person sashoalm    schedule 11.01.2013    source источник
comment
не могли бы вы указать причину или ваш случай, я никогда не блокировал сканф   -  person MOHAMED    schedule 11.01.2013
comment
Я кое-что припоминаю о просмотре и нашел это, погуглив, может быть, что-то там работает. velocityreviews.com/forums/   -  person dutt    schedule 11.01.2013


Ответы (1)


select() и poll() - это способ POSIX, но они не будут работать в Windows для не-сокетов.

Если вашими целями являются Windows и Unix, у вас не будет достаточно переносимых систем. Более того, в Windows вы должны обрабатывать каналы и дескрипторы консоли отдельно: PeekNamedPipe() для каналов, PeekConsoleInput() для консоли (и с последним довольно сложно, даже если у вас нет ENABLE_LINE_INPUT, превращаясь в настоящую банку червей, если у вас есть) .

Выполнение ввода в отдельном потоке более переносимо, даже с учетом различий pthread и Windows (и существуют библиотеки pthread-for-Win32, чтобы избавиться от этих различий).

person Anton Kovalenko    schedule 11.01.2013