Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 11

Temat: inne rozwiązanie

  1. #1
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie inne rozwiązanie

    Jak inaczej w bash, lub w ogóle w perl rozwiązać taką potrzebę:

    Kod:
    #!/bin/bash
    FILE='/tmp/xxc'
    function checkit() {
    sleep 5
    test -e $FILE &> /dev/null
    }
    while [ $? -eq 0 ];
       do
          checkit
    done
    echo -e "File $FILE not found\nWhat next..?"
    ?
    ***********
    * markossx *
    ***********

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Kod:
    #!/usr/bin/perl
    use strict;
    my $FILE = '/tmp/file';
    
    while (! -e $FILE) {
      print "File $FILE not found\nWhat next..?\n";
      exit 1;
    } else {
      sleep 5;
    }
    Tak dlugo jak dlugo plik jest, proces nic nie robi. Jak plik zninie, dostajesz komunikat i exit(1) czyli mozesz to zlapac w shell'u albo dac inny exit np pod nagiosa.
    Specjalnie konstrukcja ma 2 przypadki, bo jeszcze jest mozliwosc przerwania aplikacji przez kill() albo Ctrl+C a wtedy nie powinno wyemitowac exit(1) tylko zakonczyc prace normalnie bez zwracania bledu.

    O takie cos chodzilo?
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Idealne uproszczenie mojego rozwiązania,
    a jakieś inny algorytm na ten sam problem?

    Może są jakieś inne sposoby na osiągnięcie
    tego samego rezultatu?
    ***********
    * markossx *
    ***********

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Jesli chcesz spelnic wszystkie warunki brzegowe ktore podalem wyzej to jedynie takie cos - ewentualnie inna notacja (TIMTOWTDI) ale zasada ogolnie ta sama.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Dlaczego drążę?
    Czy to jest już rekurencja,
    czy w ogóle da się rozwiązać to rekurencyjnie?
    ***********
    * markossx *
    ***********

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    To nie byla rekurencja, ale to jest:

    Kod:
    #!/usr/bin/perl
    use strict;
    my $FILE = '/tmp/file';
    
    if (! -e $FILE) {
      print "File $FILE not found\nWhat next..?\n";
      exit 1;
    } else {
      sleep 5;
      exec($0);
    }
    Skrypt rekurencyjnie odpala samego siebie ale nie przez system() ktory powodowalby ze wywolujacy skrypt czeka na zakonczenie procesu potomnego (DoS przez zuzycie calego RAMu) tylko przez uzycie exec() - rodzic konczy dzialanie i przekazuje kontrole do procesu potomnego. Taka rekurencja w stylu bash'a bardziej nieco ale rekurencja.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Jasne, dzięki Sherlocku
    ***********
    * markossx *
    ***********

  8. #8
    Zarejestrowany
    Jan 2009
    Postów
    836

    Domyślnie

    Jaka rekurencja chłopaki ? rekurencja występuje wtedy jeśli w kodzie funkcji wywołujemy tę funkcję czyli np:

    function myFunction()
    {
    if int a==1 myFunction()
    else
    }

    najlepszym przykładem może być liczenie potęgi za pomocą rekurencji.

  9. #9
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    A jak nazwiesz fakt ze program wywoluje samego siebie aby wykonac nastepny cykl?
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  10. #10
    Zarejestrowany
    Jan 2009
    Postów
    836

    Domyślnie

    Może przeoczyłem ten fakt czasami coś palnę bez sensu : P

Strona 1 z 2 12 OstatniOstatni

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj

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