system("xxxxxx") w Linuxie

0

Witam wielu z doświadczonych programistów odradza używania poleceń typu system("pause"); w Windowsie czy innych tego typu.. ale jak to się tyczy w Linuxach? użytkownik Linuxa nie obejdzie się bez terminala.. każdy doświadczony użytkownik go używa.. a więc np potrzebuje przestawić w programie karte sieciową(wifi) na tryb promisc.. służy do tego polecenie:
ifconfig wlan0 promisc
i moje pytanie czy użyć do tego polecenia system("belbleble") czy szukać innego rozwiązania?

0

Po prostu stosuj procesy, wtedy uzyskujesz większa kontrola nad sterowaniem w programie. Luknij tutaj: http://doc.qt.nokia.com/latest/qprocess.html

0

Piszę w c++ a nie Qt więc ten link za wiele mi nie da;( no ale poczytam może coś wywnioskuje ;D

0

Qt jest w C++. Jeśli nie chcesz używać Qt to możesz odwołać się do API linuksa i użyj exec:
http://pl.wikibooks.org/wiki/Linux/Wi%C4%99cej_o_fork_i_exec
http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html
http://www.gidforums.com/t-3369.html

0

można użyć system("ifconfig wlan0 promisc"), pytanie tylko czy program będzie uruchomiony z uprawnieniami roota — a taka operacja może roota wymagać.
może więc system("sudo ifconfig wlan0 promisc"), ale to też przy założeniu, że mamy działające sudo.

0

Znowu ja ;D nie chce zakładać nowego tematu więc będę kontynuować w tym. a jako że zaciekawiły mnie te procesy w Qt do których dał mi link code_killer pobrałem sobie ładnie qt creator i śmigam ;D
moje pytanko tym razem brzmi tak... A może zacznę od kodu:

#include <QtCore/QCoreApplication>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
        while(true)
        {
            cout<<"Tu mam dziaac dopoki nie nacisne 'k' \n";
        }
    return a.exec();
}

Chodzi mi o to żeby pętla działała dopóki nie nacisnę klawisza "k".. a po naciśnięciu klawisza k program powinnien wykonac jeszcze z 3 instrukcje po czym sie zamknąć.. i moje pytanko jak to zrobić? Czy muszę utworzyć nowy wątek który będzie sprawdzał czy nie został wciśnięty klawisz "k" czy może Qt udostępnia jakiś magiczny sposób na to aby przerywał działanie programu kiedy zostanie wciśnięty dany klawisz ?

0

nieno raczej daj po prostu

 
...

char zmienna;

while ((zmienna = getchar()) != 'k')

...
 

choć różnicy chyba nie ma. Zaleta jest taka że jak znasz język to nie musisz przekopywać manuali żeby coś tak prostego napisać.

0

Hmm nie o takie cos dokładnie mi chodziło.. chyba źle się wyraziłem.. Chodzi mi o to że program przy każdym zamknięciu ma wykonać jeszcze daną funkcję którą ja zdefiniuje ale nie chodzi mi o takie cos:
moja_funkcja_na_zakonzcenie();
return 0;
raczej o takie cos ze np jak użytkownik kliknie krzyżyk na konsole zostanie najpierw wywolana ta funkcja a następnie zamknięty program.. teraz chyba juz lepiej zdefiniowałem o co mi chodzi ;D

1

Albo przechwyć odpowiedni event sygnał (jak np. chcesz wyświetlić okienko w stylu "Czy chcesz anulować wykonane zmiany?"|"Ok"|"Anuluj"|"Zapisz"), albo jeżeli nie potrzebujesz już qt to po prostu wykonaj to po app.exec. Możesz też wykonać to w destruktorze twojej klasy aplikacji.

A qt ma swoją własną pętlę zdarzeń w stylu while(true), wykonywaną po wywołaniu app.exec() i przygotowaniu wszystkiego.

0

Okej dzięki;)
a oto jak sobie poradziłem z wujkiem google:

#include <iostream>
#include <csignal>
#include <cstdlib>
using namespace std;

void quit(int);

int main(int argc, char *argv[])
{
    signal(SIGINT,quit);

    while(1) {}

    return 0;
}

void quit(int a)
{
    cout<<"koniec programu";
    exit(0);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1