2012-05-18 1 views
2

Как указано название. У меня есть gets(buffer) в while(1) бесконечный цикл, который останавливается на gets(buffer) и ждет бесконечности. Я бы хотел, чтобы gets(buffer) подождал только, скажем, 3 секунды для ввода из STDIN, а не пока строка не находится в буфере, чтобы снова передать управление, и так далее.
C - это язык
Спасибо заранее!Как сделать gets() подождать только определенное время для ввода из STDIN в C?

+2

Вы не должны использовать 'gets', а' fgets', потому что 'gets' небезопасен. Если ваш буфер слишком мал, вы получаете переполнение буфера. – Gandaro

+2

Никогда не используйте 'gets'. ** НИКОГДА не используйте 'get'. –

+0

Поскольку это нельзя сказать достаточно, ** НИКОГДА НИКОГДА НИКОГДА ** использовать 'gets'. **КОГДА-ЛИБО**! – Dave

ответ

3

Стандарт gets() Функция не имеет возможности таймаута. Канонический способ реализовать тайм-аут в операциях ввода-вывода в C связан с select() function.

+0

есть способ реализовать select() с STDIN в качестве сокета? и установить тайм-аут - tv_sec - в select() в течение некоторого времени, делать то, что я хотел бы? – azrahel

+0

@azrahel посмотреть на 'STDIN_FILENO' – Dave

Смежные вопросы