С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
14 / 14 / 2
Регистрация: 26.04.2013
Сообщений: 191
1

Select отслеживание псевдотерминала Я дурак или лыжи не едут?

30.09.2014, 16:56. Показов 1568. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте товарищи!
Тема такая. Начну из далека... Вобщем надо мне определить было работает у меня интернет радио или нет, то есть идут пакеты или не идут, взял я значит для этих целей tcpdump слушаю им по нужному порту, если радио работает он выводит информацию о пакетах которые лезут, если пакеты не идут соотвественно новые строки в терминале не появляются, значит радио не работает. Так как делать это мне надо програмно, я запускаю tcpdump в псевдотерминале forkpty() и дескриптор псевдотерминала пытаюсь наблюдать селектом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
      fd_set rfds;
          struct timeval tv;
          int retval,fd_snif;
          FILE *fds;
          char str[1024];
 
        pid_t  p = forkpty(&fd_snif, 0, 0, 0);//запускаем псевдотерминал
 
          switch (p)
 
          {
                     case 0: {    //если с псевдотерминалом прокатило то будем
                                     if (execlp("tcpdump", "tcpdump", "src","port","8000", NULL) < 0)
                                         {
                                              perror("tcpdump");
                                              exit(1);
                                          }
                                      break;
                                 }
                     case -1: {  //если нет то вылетаем с позором
                                       perror("forkpty");
                                      exit(EXIT_FAILURE);
                                   }
                     default: break;
          }
 
 
          fds =  fdopen(fd_snif, "r");
          setvbuf(fds, (char *) NULL, _IONBF, 0);
 
          FD_ZERO(&rfds);
          FD_SET(fd_snif, &rfds);
 
          tv.tv_sec = 10;
          tv.tv_usec = 0;
 
          printf("\n");
         while(retval = select(fd_snif + 1, &rfds, NULL, NULL, &tv))
            {
                     fgets(str,1024,fds);
                     printf("%s%s%s",GREEN,str, RESET);
            }
 
          printf("%s%s%s",RED,"\nДанные не появились в течение десяти секунд.\n",RESET);
          exit(0);
Вот следующим образом я пытаюсь это реализовать, ну пробовал разные вариации все близки к этой. На солько я понимаю селект если я его правильно использую, в случае если в fd_snif появляются новые строки(А они появляются я проверял) должен возвращать колличество доступных для чтения дискрипторова то бишь один, а если там данные для чтения не появились он должен держать этот цикл либо пока данные не появятся либо пока не выйдет таймаут.
А я наблюдаю следующую картину строки идут и идут между строками меньше пол секунды на глаз, ну ни как ни десять секунд как написано в таймауте и через десять секунд после запуска программы он выводит соообщение о том что таймаут вышел, при чём между этим сообщением и предыдущем опять же проходит мало времени, доли секунды
Bash
1
2
3
4
5
6
7
16:21:32.863111 IP rt1.radioc.ru.8000 > debian.local.53743: Flags [P.], seq 953005:954260, ack 1, win 108, options [nop,nop,TS val 3989440485 ecr 3966528], length 1255
16:21:33.051485 IP rt1.radioc.ru.8000 > debian.local.53743: Flags [P.], seq 954260:955514, ack 1, win 108, options [nop,nop,TS val 3989440533 ecr 3966548], length 1254
16:21:33.168771 IP rt1.radioc.ru.8000 > debian.local.53743: Flags [P.], seq 955514:956768, ack 1, win 108, options [nop,nop,TS val 3989440562 ecr 3966585], length 1254
16:21:33.206761 IP rt1.radioc.ru.8000 > debian.local.53743: Flags [P.], seq 956768:959276, ack 1, win 108, options [nop,nop,TS val 3989440572 ecr 3966585], length 2508
16:21:33.206761 IP rt1.radioc.ru.8000 > debian.local.53743: Flags [P.], seq 956768:959276, ack 1, win 108, options [nop,nop,TS val 3989440572 ecr 3966585], length 2508
 
Данные не появились в течение десяти секунд.
Как мне это понимать и в чём я может быть не правв, почему если данных нет он не блокирует цикл, а выводит строки которые читает из псевдотерминала, и почему потом резко оказывается что таймаут???
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2014, 16:56
Ответы с готовыми решениями:

Или я дурак или лыжи не едут, склоняюсь к первому.
говорит необъявленный идентификатор относительно всех функций класса notebook. Пробовал все...

Проверьте пожалуйста,то ли я дурак,то ли лыжи не едут
Нужно построить график,вроде все сделала,однако числа совсем неудачные вышли(например -5000 а...

Динамическая память(толи я дурак, то ли правда лыжи не едут)
Есть код программы: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt;...

Либо я дурак либо лыжи не едут
Процессор intel core i7 4790 Видеокарта Видеокарта GIGABYTE GeForce GTX 1070 8g оперативка 16...

3
14 / 14 / 2
Регистрация: 26.04.2013
Сообщений: 191
30.09.2014, 17:39  [ТС] 2
Вследствии перделки кода следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
 while(1)
       {
           retval = select(fd_snif + 1, &rfds, NULL, NULL, &tv);
           if(retval == 0)
              {
                  printf("%s%s%s",RED,"\nДанные не появились в течение десяти секунд.\n",RESET);
              }
                fgets(str,1024,fds);
                printf("%s%s%s",GREEN,str, RESET);
       }
можно увидеть что в псевдотерминале fd_snif ещё есть что почитать(и даже если читать без буфера ридом напрямую из fd_snif), и видеть можно сколько времени прошло между сообщениями, время каждого пакета написано в выводе.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
17:34:32.194646 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 203972:205226, ack 1, win 108, options [nop,nop,TS val 3990535303 ecr 5061351], length 1254                                                                             
17:34:32.230890 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 205226:206480, ack 1, win 108, options [nop,nop,TS val 3990535313 ecr 5061351], length 1254                                                                             
17:34:32.271310 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 206480:207734, ack 1, win 108, options [nop,nop,TS val 3990535323 ecr 5061380], length 1254                                                                             
17:34:32.411074 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 207734:208988, ack 1, win 108, options [nop,nop,TS val 3990535358 ecr 5061400], length 1254                                                                             
17:34:32.494278 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 208988:210242, ack 1, win 108, options [nop,nop,TS val 3990535379 ecr 5061435], length 1254                                                                             
17:34:32.535121 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 210242:211496, ack 1, win 108, options [nop,nop,TS val 3990535389 ecr 5061435], length 1254                                                                             
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:32.627840 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 211496:212750, ack 1, win 108, options [nop,nop,TS val 3990535412 ecr 5061466], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:32.744398 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 212750:214003, ack 1, win 108, options [nop,nop,TS val 3990535441 ecr 5061489], length 1253
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:32.744499 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [.], seq 214003:215351, ack 1, win 108, options [nop,nop,TS val 3990535441 ecr 5061489], length 1348
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:32.744564 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 215351:216512, ack 1, win 108, options [nop,nop,TS val 3990535441 ecr 5061489], length 1161
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:32.871522 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 216512:217766, ack 1, win 108, options [nop,nop,TS val 3990535473 ecr 5061508], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:32.982458 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 217766:219020, ack 1, win 108, options [nop,nop,TS val 3990535500 ecr 5061540], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.109689 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 219020:220274, ack 1, win 108, options [nop,nop,TS val 3990535532 ecr 5061578], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.203463 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 220274:221528, ack 1, win 108, options [nop,nop,TS val 3990535556 ecr 5061609], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.336170 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 221528:222782, ack 1, win 108, options [nop,nop,TS val 3990535589 ecr 5061633], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.375180 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 222782:224035, ack 1, win 108, options [nop,nop,TS val 3990535599 ecr 5061633], length 1253
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.470939 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 224035:225289, ack 1, win 108, options [nop,nop,TS val 3990535622 ecr 5061666], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.506812 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 225289:226543, ack 1, win 108, options [nop,nop,TS val 3990535632 ecr 5061666], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.613324 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 226543:227797, ack 1, win 108, options [nop,nop,TS val 3990535658 ecr 5061699], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.692713 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 227797:229051, ack 1, win 108, options [nop,nop,TS val 3990535678 ecr 5061735], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.733080 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 229051:230305, ack 1, win 108, options [nop,nop,TS val 3990535688 ecr 5061735], length 1254
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.772698 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 230305:231560, ack 1, win 108, options [nop,nop,TS val 3990535698 ecr 5061755], length 1255
 
Данные не появились в течение десяти секунд.                                                                                                                                                                                                        
17:34:33.899305 IP rt1.radioc.ru.8000 > debian.local.54040: Flags [P.], seq 231560:232814, ack 1, win 108, options [nop,nop,TS val 3990535729 ecr 5061775], length 1254
0
deleted
177 / 50 / 5
Регистрация: 29.03.2013
Сообщений: 365
30.09.2014, 19:04 3
Лучший ответ Сообщение было отмечено messad_el как решение

Решение

Начну из далека
Posix не запрещает селекту изменять timeval, передаваемый в селект
1
14 / 14 / 2
Регистрация: 26.04.2013
Сообщений: 191
30.09.2014, 20:30  [ТС] 4
Так не пойму. в каком смысле изменять timeval? Это же вроде как оставшееся время, ну если я всё правильно понимаю он когда поток готов для чтения это время.... АААААААа то есть вы хотите сказать что каждый удачный прочтённый раз мне надо заново выставлять timeval в нужное мне значение.... Это идея щас попробую...

Добавлено через 1 час 3 минуты
Вы были совершенно правы, действительно так и есть, как же я сам-то не додумался. Спасибо большое))
0
30.09.2014, 20:30
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2014, 20:30
Помогаю со студенческими работами здесь

SUBDATE (то ли лыжи не едут, то ли я .)
Что-ж, буду краток: SELECT * FROM ev.public.&quot;DataHolder&quot; WHERE ts &lt;= (SELECT MAX(ts) FROM...

либо лыжи у меня не едут
либо переименовать папку как-то сложнА. есть папка с файлами под названием &quot;English&quot; и её нужно...

То ли я баран, то ли лыжи не едут на laravel5
Приступил к изучению laravel5. Посмотрел на ютубе пару каналов, объяснили в основах что это такое...

То ли boot не пашет, то ли лыжи не едут
Дали жёсткий диск с ошибкой смарта что он умер, смарт отключил, поставил его как второе устройство,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru