Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak odebrać wynik funkcji z polecenia systemowego?

Ostatnio zmodyfikowano 2012-01-17 02:02
Autor Wiadomość
konri1990
Temat założony przez niniejszego użytkownika
Jak odebrać wynik funkcji z polecenia systemowego?
» 2012-01-14 20:19:15
Opiszę mniej więcej do czego mi jest to potrzebne. Otóż muszę zabezpieczyć tak program, aby użytkownik nie mógł utworzyć za dużo procesów. Dlatego też muszę przed uruchomieniem programu wywołać funkcje
system("ps -e|wc -l)
. I wszystko ok mam liczbę tych procesów wyświetlaną w konsoli ale jak wstawić to do zmiennej? Przypisanie odpada bo funkcja ta zwraca 0(powodzenie) albo -1(porażka). Próbowałem strumieniem >> ale też niestety nici. Ma ktoś może jakąś poradę? Jakiś inny sposób tez może być, być może trzeba użyć jakiejś innej funkcji. Dodam, że program piszę pod Linuxem w C.

P.S Mój pierwszy post i temat. Chciałbym tutaj też podziękować za portal i forum , ponieważ naprawdę wiele rzeczy jest tutaj napisane świetnie i z głową;)
P-48217
DejaVu
» 2012-01-14 23:25:49
yh... zacznijmy może od początku... jeżeli chcesz robić cokolwiek pożytecznego na jakimkolwiek system operacyjny to zapomnij o używaniu funkcji system - jest to zakazany owoc języka C i C++, który jest namiętnie używany przez pseudo programistów.
Pamiętaj:
1. Google Twoim przyjacielem.
2. Wszystkie problemy związane z programowaniem przy zastosowaniu standardowych bibliotek zostały co najmniej kilka razy rozwiązane w Internecie.

http://linux360.pl/forum/thread-994.html
http://linuxreviews.org/man/popen/index.html.pl
P-48247
konri1990
Temat założony przez niniejszego użytkownika
» 2012-01-15 14:08:34
Dzięki bardzo za odpowiedź. Szukałem oczywiście w googlach ale widocznie nieskutecznie:P Nie zamknę jeszcze tematu bo mogę mieć, problem z realizacją, a jeśli się coś uda osiągnąć to wrzucę tutaj dla innych:)
P-48278
konri1990
Temat założony przez niniejszego użytkownika
» 2012-01-17 01:07:13
Wrzucam zatem moja funkcję, działa dobrze jednak jutro muszę ten projekt zdać, więc jeśli ktoś dostrzega jakiś błąd lub coś co mogę poprawić/ulepszyć to słucham opinii:)
C/C++
//funkcja odpowiadajaca za otwieranie potoku
int polecenie( char * war1 ) { //moje war1 to wlasnie ps -e|wc -l
    FILE * pipein_fp;
    char readbuf[ 80 ];
    int ilosc;
   
    /* Tworzymy jednokierunkowy potok za pomocą popen() */
    if(( pipein_fp = popen( war1, "r" ) ) == NULL )
    {
        perror( "popen" );
        exit( - 10 );
    }
    /* Przetwarzanie */
    while( fgets( readbuf, 80, pipein_fp ) )
         puts( readbuf );
   
    /* Zamknięcie potoka */
    if( pclose( pipein_fp ) ==- 1 )
    {
        printf( "Blad przy zamykaniu potoku" );
        exit( - 11 );
    };
   
    ilosc = strtol( readbuf, NULL, 10 ); //rzutowanie na wartość liczbowa
   
    return ilosc;
}
P.S swoją drogą jaki znacznik muszę wpisać, żeby zaznaczyło mi, że to kod? Bo <code></code> nie działa :/
P-48475
DejaVu
» 2012-01-17 01:51:59
» KursyKurs STC kurs
P-48476
konri1990
Temat założony przez niniejszego użytkownika
» 2012-01-17 02:02:16
Ok dzięki:) Swoją drogą wystarczyło dać w tryb edycji i już widać, sorka. Tak jak pisałem czekam do jutra na jakieś opinie i jutro zamykam temat:)
P-48477
« 1 »
  Strona 1 z 1