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?