Вот такой вот вопрос. Есть стандартный слегка модифицированный пример из мануала по 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 происходит после ввода целой строки, а не после ввода одного символа? ведь данные уже поступили... Есть подозрения, что это связано с настройками терминала, если это так, то подскажите, плз, как это побороть.
Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от Iceman82
Ответ на:
комментарий
от klalafuda
Ответ на:
комментарий
от Iceman82
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Баги в select! (2003)
- Форум вопрос про select() (2013)
- Форум вопрос по функции select (2014)
- Форум OpenWRT программирование последовательного порта (2019)
- Форум помогите с select/pipe, плииииз... (2003)
- Форум помогите с select/pipe, плииииз... (2003)
- Форум Помогите разобраться в паре строчек [C][study][OpenGL][POSIX][Async] (2011)
- Форум синхронизация pipe-ов через select? (2007)
- Форум Copy Paste в Иксах (2006)
- Форум [C++] curl_multi + pthreads = segfault (2010)