Для чего?
Предполагается, что пользователь работает с каким-то онлайн-ресурсом и только с ним, вдруг случается неслыханное событие — пропадает сеть или ресурс оказывается вне доступа.
Чтобы не просиживать у компьютера зря, пользователь делает погромче звук и запускает программу, которая ждёт появления ресурса в сети, а сам отправляется считать воробьев на балкон.

image

Возможности
  • Может находится в двух состояниях.
  • Работает в фоне.
  • Осуществляет мониторинг состояния ресурса.
  • Единожды оповещает с помощью звука об изменении состояния.

Описание
Выдает звуковые сигналы: на одной частоте если ресурс доступен, на другой, — если ресурс не доступен; после изменения состояния уходит в фон и осуществляет проверку доступности ресурса.

Код
Код Си.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int test(char * ip) {

		if(system(ip)==0) {	
	
		return 1;
			
		}
		
		else 
		
		{
	
		return 0;

		}
		
	}	


void wait(int b, char * ip) {

		while (1) {
		
		sleep (5);

		test(ip);
		
		if (b!=test(ip)) {
		b=test(ip);
		
		if (test(ip) == 1) {
	system("beep -f 2200 -l 3000");
		} 
		else 
		{
	system("beep -f 1200 -l 2000");
		
				}
	
			}

		}
	}



void start (char * ip) {
	
	if (test(ip)==0)
	system("beep -f 1200 -l 2000");
	
	}


 int main (int argc, char *argv[]) {
             
	     if (argc < 2) {
             printf("Введите адрес  вторым параметром ");
             return 0;         
             } 
		
	
		char ip[100]="ping -c 1 ";
		sprintf(ip, "%s%s", ip, argv[1]); 
	    
	     int b = 0;
	     start (ip);
	     wait (b, ip);

		
}



P.S. Конечно, beep лучше заменить чем-нибудь.
Поделиться с друзьями
-->

Комментарии (10)


  1. kahi4
    17.10.2016 17:03
    +1

    while ! ping -c1 www.google.com &>/dev/null; do :; done && echo -ne '\007'

    Зачем тут это вообще? Это, эм, даже на hello world для C с трудом тянет.


    1. dcc0
      17.10.2016 17:09
      -1

      Ваш пример не о том, вообще…


      1. kahi4
        17.10.2016 17:18

        А о чем ваш пример? Конечный автомат с двумя состояниями? Которые, вдобавок, не хранятся, а каждую новую итерацию он опрашивает с нуля и принимает решение? Нет ни переходов между состояниями, ничего, только вечный цикл, внутри которого условие. Это как-то не сильно тянет на конечный автомат. Мой пример в небольшие доработки тоже так сможет.


        1. dcc0
          17.10.2016 17:23

          Покажите, если будет время…
          Условие — оповещение один раз при изменении состояния.


        1. dcc0
          17.10.2016 18:00

          С учётом Вашего примера, алгоритм Вы не поняли…


  1. HunterXXI
    17.10.2016 17:05

    сначала прочитал конченого


    1. dcc0
      17.10.2016 17:07

      Я так и думал, что кто-нибудь так и прочитает, хотел поэтому написать детерминированного


      1. qw1
        17.10.2016 17:31

        Конечный и детерминированный — ортогональные понятия, не синонимы.


        1. dcc0
          17.10.2016 17:54

          Спасибо.
          С учетом статьи в Вики «Детерминированность» все-таки я подразумевал детерминированный


  1. KlimovDm
    17.10.2016 17:16
    +1

    >>> или ресурс оказывается вне доступа

    Доступ к ресурсу не мониторится ping-ом. Скажем прилег httpd, а сервер пингуется. Или наоборот, все работает, но прикрыто icmp echo.