Zasadność używania system()

Zasadność używania system()
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:16 minut
0

Zmajstrowałem sobie jakiś czas temu coś takiego:

Kopiuj
string FileSystemUtils::GetFileContent(const std::string& filePath)
{
    string ret;
    
    try{
      string cmd = "cat " + filePath;
      ret = SystemExecute::ExecuteCmd(cmd);
    }
    catch(CantUseSystemCallsException)
    {
      ret = ObtainFileContent(filePath);
    }
    return ret;
}

Gdzie klasa SystemExecute::ExecuteCms() to mój wrapper na polecenie system(), zwracam sobie dzięki temu bezpośrednio to, co zwraca wpisane polecenie. ObtainFileContent() to pobranie zawartości pliku za pomocą biblioteki standardowej.

Wtedy jak to pisałem takie rozwiązanie wydawało mi się koszerne, wyszedłem z założenia, że cat dużo lepiej się sprawi w pobieraniu zawartości pliku, thread safety i takie tam. Jednakowoż niedawno natrafiłem na artykuł w którym przeczytałem o szeregach wad używania system(). Jak widać po kodzie na przenośności mi nie zależało, jednak podobno powoduje ono duże obciążenie systemu. Tą metodę zamierzam przepisać, ale zacząłem się też zastanawiać kiedy używanie system() ma sens?


MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:14 minut
1

W większości wypadków nie ma to sensu (wywołanie system dla cat jest bezsensu).
Jest to dobre rozwiązanie by uruchomić jakiś skrypt.
Poza tym są takie oczywistości jak uruchomienie jakiejś aplikacji.
Może ktoś inny ma inne pomysły kiedy wywołanie system() ma sens.

Poza tym samo system() jest dość kulawe, lepiej używać czegoś innego, coś kojarzę cię z Qt wiec, QProcess powinien być dla ciebie lepszy.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
several
Zgadza się, QProcess zdażyło mi się użyć gdy robiłem coś w rodzaju watchdoga dla innej mojej apki, zupełnie o nim zapomniałem :)
0

skoro jest jasno powiedziane, że nie powinno sie go używać to dlaczego szukasz usprawiedliwienia na to aby jednak go użyć ?

msm
Jeśli ja/ktoś jasno powie że nie należy używać int to przestaniesz go używać? Mam nadzieję że nie.
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:16 minut
0
fake_nick napisał(a):

skoro jest jasno powiedziane, że nie powinno sie go używać to dlaczego szukasz usprawiedliwienia na to aby jednak go użyć ?

Nie szukam usprawiedliwienia.

several napisał(a):

Tą metodę zamierzam przepisać, ale zacząłem się też zastanawiać kiedy używanie system() ma sens?


_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
1

Ja widzę tylko dwa uzasadnienia na użycie system():

  1. Robię coś dla siebie na jednorazowe sprawdzenie jakiegoś dziwacznego pomysłu.
  2. Program musi umieć odpalić jakiś skrypt który przynajmniej częściowo podaje użytkownik zaś składnia tego skryptu koniecznie musi być zgodna z systemem operacyjnym - ale to strasznie wydumana opcja.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.