Ваш вопрос звучит немного запутанным.select()
используется для блокировки до тех пор, пока не будет доступен ввод.Но вы выполняете фактическое чтение с помощью обычных функций чтения файлов (например, read
, fread
, fgetc
и т. Д.).
Вот краткий пример.Он блокируется, пока в stdin не появится хотя бы один символ, доступный для чтения.Но, конечно, если вы не переключите терминал в какой-нибудь сырой режим, он будет блокироваться до тех пор, пока вы не нажмете клавишу ввода, когда любые введенные символы будут сброшены в буфер файлов (из некоторого буфера терминала).
#include <stdio.h>
#include <sys/select.h>
int main(void) {
fd_set s_rd, s_wr, s_ex;
FD_ZERO(&s_rd);
FD_ZERO(&s_wr);
FD_ZERO(&s_ex);
FD_SET(fileno(stdin), &s_rd);
select(fileno(stdin)+1, &s_rd, &s_wr, &s_ex, NULL);
return 0;
}