Zasadność używania system()

0

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

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?

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.

0

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

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?

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.

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