Advertisement
Guest User

poll_example

a guest
Dec 4th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.84 KB | None | 0 0
  1. //  Программа для демонстрации функции poll
  2. #include <stdio.h>
  3. #include <string.h> //  memset
  4. #include <poll.h>
  5. #include <unistd.h> //  STDIN_FILENO
  6.  
  7. //  В Windows c unistd.h вероятно возникнут проблемы :)
  8. //  STDIN_FILENO там определено где-то еще
  9.  
  10. int main( int argc, char* argv[] )
  11. {
  12.     //  Структура с данными, описывающими файловый дескриптор
  13.     struct  pollfd  pfd;
  14.     //  Таймаут в миллисекундах
  15.     int ms_timeout;
  16.     //  Результат выполнения poll
  17.     int pr;
  18.     //  Введенный символ
  19.     unsigned char   ch;
  20.  
  21.     //  Будем ждать ввода пользователя 4 секунды = 4000 миллисекунд
  22.     ms_timeout = 4000;
  23.     //  Зачистим от мусора
  24.     memset( &pfd, 0, sizeof(struct pollfd) );
  25.     //  Подготовим структуру для наблюдения за статусом дескриптора
  26.     pfd.fd = STDIN_FILENO;
  27.     //  Будем отслеживать событие "Появились данные для чтения"
  28.     pfd.events = POLLIN;
  29.  
  30.     printf( "Введите 'Y' для продолжения работы: " );
  31.     fflush( stdout );
  32.     pr = poll( &pfd, 1, ms_timeout );
  33.     if( pr == 0 )
  34.     {
  35.         printf( "Прошло более %d мс. Выход по таймауту\n",
  36.                 ms_timeout );
  37.     }
  38.     else
  39.     {
  40.         if( pr > 0 )
  41.         {
  42.             //  Считаем символ из STDIN
  43.             ch = fgetc( stdin );
  44.             if( ch == 'Y' )
  45.             {
  46.                 printf( "Продолжение работы!\n" );
  47.             }
  48.             else
  49.             {
  50.                 printf( "Неизвестный символ '%c'\n", ch );
  51.             }
  52.         }
  53.         else
  54.         {
  55.             //  Произошла ошибка во время выполнения функции
  56.             //  poll
  57.             perror( "poll" );
  58.         }
  59.     }
  60.  
  61.     return  0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement