To mój pierwszy post na forum więc witam wszystkich serdecznie.
Pisząc swój pierwszy większy program natrafiłem na problem z którym nie mogę sobie poradzić. Chcę aby zależnie od wyniku:
string kom = "ping 192.168.0.2";
if (system(kom.c_str())){
instrukcja
}
program wykonywał, lub nie, w/w instrukcję. Problem jest w tym, że system() nie zwraca wartości 0 lub 1, a jedynie wyświetla na ekranie (lub po przekierowaniu strumienia np. zapisuje do pliku) efekt pingowania. Można to jakoś obejść? Jedynym, co mi przychodzi do głowy, to przerobienie programu Mike'a Muuss'a na kod c++ tak, aby można było użyć go jako wewnętrznej funkcji. Jest na to jakieś prostsze rozwiązanie? Będę wdzięczny za wszelkie sugestie, choćby nakierowanie, czego powinienem się nauczyć, żeby było to możliwe.
Pozdrawiam
edit:
Wklejam trochę więcej kodu, aby łatwiej można było zrozumieć o co mi chodzi. To jest wycinek z większej całości, ale przerobiony tak, że można go uruchomić pomimo wyseparowania. Zapomniałem też dodać, że program jest pisany równocześnie na dwa systemy - Windows XP i Ubuntu 15.04.
//kompilacja wymaga dodatnia -std=c++11
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
using namespace std;
int main(){
system("clear"); //"cls" dla Win
cout << "Sterowniku_zgłoś_się!" << endl << "ver. 0.0.0.1" << endl << endl;
cout << "Podaj zakres adresów do sprawdzenia: ";
cout << "192.168.od1->do1.od2->do2" << endl;
int od1, do1, od2, do2;
cout << "od1: ";
cin >> od1;
cout << "do1: ";
cin >> do1;
cout << "od2: ";
cin >> od2;
cout << "do2: ";
cin >> do2;
cout << "192.168." << od1 << "->" << do1 << "." << od2 << "->" << do2 << endl;
cout << "Koniec pobierania danych. Pingowanie..." << endl;
for (int i=od1; i <= do1; i++)
for (int j=od2; j <= do2; j++){
string kom = "ping -q -c 1 -l 1 -W 0.01 192.168", ip = "."; // "ping -a -n 1 -l 1 -w 25 192.168" dla Win
string ii = to_string(i);
string jj = to_string(j);
ip+=ii;
ip+=".";
ip+=jj;
kom += ip;
kom += " >> log.txt"; // " >> c:/log.txt" dla Win
cout << kom << endl;
system(kom.c_str());
}
return 0;
}