Определение наличия данных в stdin
От: kong Украина  
Дата: 12.09.02 05:45
Оценка:
Есть такая проблемка: пишется прога, которая забирает данные по конвееру из сислога. Для этого надо определять есть ли данные в 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 готов для чтения — даже когда в потоке нет данных. В чем ошибка?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.