Помогите разобраться с select (C)
Вот такой вот вопрос. Есть стандартный слегка модифицированный пример из мануала по select, в котором происходит ожидание ввода из стандартного устройства 10 секунд:
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
struct timeval timeout;
char string[BUFSIZ];
int len = 0, retval = 0;
fd_set readfd;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
printf("You have 10 seconds to enter your name: ");
FD_ZERO(&readfd);
FD_SET(0, &readfd);
retval = select(1, &readfd, NULL, NULL, &timeout);
if (retval > 0)
{
printf("data are ready\n");
len = read(0, string, sizeof(string));
}
else
{
printf("no input after 10 secs\n");
}
printf("len = %d\n", len);
printf("%s - you're speedy!\n", string);
return (EXIT_SUCCESS);
}
И вывод программы примерно следующий:
andrey@linux:~/WORK/timer_test_2> ./test
andrey<ENTER> <--- это мы вводим
You have 10 seconds to enter your name: data are ready
len = 7
andrey
- you're speedy!
И вопросов, собственно, несколько:
1. почему первый printf срабатывает ПОСЛЕ ввода строки, а не до?
2. почему возврат из select происходит после ввода целой строки, а не после ввода одного символа? ведь данные уже поступили... Есть подозрения, что это связано с настройками терминала, если это так, то подскажите, плз, как это побороть.