Ce face std::system
std::system pornește interpretorul de comenzi (sh pe Linux/macOS, cmd.exe pe Windows) cu textul dat și așteaptă terminarea comenzii. Ce afișează comanda apare direct pe ecran, nu este returnat programului.
Valoarea returnată depinde de sistem. Pe Linux/macOS conține codul de ieșire al comenzii, codificat; îl extragi cu WEXITSTATUS din <sys/wait.h>. std::system(nullptr) spune dacă există un shell disponibil.
Golește ieșirea programului (std::fflush(stdout)) înainte de apel, altfel textele pot apărea în altă ordine.
Parametri
| Parametru | Descriere |
|---|---|
comanda |
Comanda de rulat, ca text C; nullptr doar verifică dacă există shell. |
Ce returnează
O valoare dependentă de sistem (de obicei starea de ieșire a comenzii).
Exemple
Exemplul 1: Rularea unei comenzi
#include <cstdio>
#include <cstdlib>
#include <print>
int main() {
std::println("Shell disponibil: {}", std::system(nullptr) != 0);
std::fflush(stdout);
int rezultat = std::system("echo Salut din shell");
std::println("Comanda a returnat {}", rezultat);
}
Rezultat
Shell disponibil: true
Salut din shell
Comanda a returnat 0
Exemplul 2: Codul de ieșire al comenzii (Linux/macOS)
Valoarea brută 768 este 3 · 256; WEXITSTATUS extrage codul real, 3. Pe Windows valoarea este chiar codul.
#include <cstdlib>
#include <print>
#include <sys/wait.h>
int main() {
int brut = std::system("exit 3");
std::println("Valoare brută: {}", brut);
std::println("Codul comenzii: {}", WEXITSTATUS(brut));
}
Rezultat
Valoare brută: 768
Codul comenzii: 3
Greșeli frecvente
- Pui în comandă text primit de la utilizator (
system(("ping " + adresa).c_str())): cineva poate scrie; rm -rf ~. Nu construi comenzi din date nesigure. - Folosești
system("pause")sausystem("cls"): funcționează doar pe Windows.
Comenzi înrudite
std::exit: Oprește imediat programul cu un cod de ieșire; rulează funcțiile atexit și distruge obiectele statice, dar nu și pe cele locale.std::getenv: Citește valoarea unei variabile de mediu (de exemplu HOME sau PATH); returnează nullptr dacă nu există.