Cześć,
mam problem z działaniem funkcjo popen pod tymi dwoma systemami (zapożyczone z Stack Overflow, wcześniej próbowałem z innymi kombinacjami, też z popen):
string Utils::exec(const string &cmd) {
DEBUG("Exec: " + cmd);
std::array<char, 128> buffer;
std::string result;
std::shared_ptr<FILE> pipe(popen(cmd.c_str(), "r"), pclose);
if (!pipe) throw std::runtime_error("popen() failed!");
while (!feof(pipe.get())) {
if (fgets(buffer.data(), 128, pipe.get()) != NULL)
result += buffer.data();
}
return result;
}
Pod Linuksem kod wykonuje się poprawnie i zwraca output polecenia, które tak wywołuje. W Mac os'ie wygląda to tak, jakby polecenie uruchamiało się w tle, a swój stdout przekierowywało mimo wszystko do konsoli. Powyższe exec gubi się wtedy i zwraca zwykle pusty string, przez co program się wysypuje.
Macie jakieś pomysły jak to można usprawnić?
Maciek