СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

H Бытовое применение детерминированного автомата (в фоне) в черновиках Recovery Mode

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

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 ,  
while ! ping -c1 www.google.com &>/dev/null; do :; done && echo -ne '\007'

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

–1
dcc0 ,  
Ваш пример не о том, вообще…
0
kahi4 ,  

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

0
dcc0 ,  
Покажите, если будет время…
Условие — оповещение один раз при изменении состояния.
0
dcc0 ,  
С учётом Вашего примера, алгоритм Вы не поняли…
0
+1 –1
HunterXXI ,   * (был изменён)
сначала прочитал конченого
0
dcc0 ,  
Я так и думал, что кто-нибудь так и прочитает, хотел поэтому написать детерминированного
0
qw1 ,  
Конечный и детерминированный — ортогональные понятия, не синонимы.
0
dcc0 ,  
Спасибо.
С учетом статьи в Вики «Детерминированность» все-таки я подразумевал детерминированный
+1
KlimovDm ,  
>>> или ресурс оказывается вне доступа

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