Ты не можешь вообще. Под Posix вы можете настроить поток, чтобы поймать
конкретный сигнал и использовать pthread_kill()
; после возвращения из
обработчик сигнала, блокирующий ввод-вывод на системном уровне (т.е. read()
),
вернуть с errno
равным EINTR
. Помимо этого, вы в значительной степени
милость реализации iostream, которая имеет два варианта (
разработчик iostream, а не вы):
он может вернуться назад и повторить чтение, или
он может рассматривать это как условие ошибки и установить failbit
.
В первом случае, вы ничего не можете с этим поделать, кроме
реализовать свой собственный streambuf
и использовать его (который для консоли
ввод, не так сложно, как кажется). Во-вторых, вы должны установить
errno
до 0 перед чтением и проверьте его после сбоя чтения (на
уровень iostream); если это EINTR
, вы можете принять соответствующие меры,
не забудьте сбросить ошибку (std::ios_base::clear()
), если вы
намерены повторно использовать поток.