Есть такая проблемка: пишется прога, которая забирает данные по конвееру из сислога. Для этого надо определять есть ли данные в stdin. Если просто опрашивать stdin, то прога сильно грузит процессор. Нужен совет как сделать так, чтобы прога находилась в спящем режиме, а при поступлении данных в stdin — просыпалась.
Попоробывал вот такое решение проблемы:
int iRes_stdin, iStdin;
struct timeval timeout;
fd_set readfd;
//definition of presence of the data in stdin
iStdin=fileno(stdin);
FD_ZERO(&readfd);
FD_SET(iStdin, &readfd);
timeout.tv_sec = 60;
timeout.tv_usec = 60000;
iRes_stdin = select(iStdin + 1, &readfd, NULL, NULL, &timeout);
if (iRes_stdin > 0 )
{
//забираю данные
}
По идее функция select() определяет наличие готовых к чтению дескрипоторов и тогда возвращает положительное значение. Если таймаут истек то возвращается ноль. Вроде все подходит, но почему-то select()всегда возвращает, что дескриптор stdin готов для чтения — даже когда в потоке нет данных. В чем ошибка?