Trong C++, có thể khởi chạy (launch) một ứng dụng bên ngoài (như Notepad, Calculator, trình duyệt...) bằng hàm system() từ header <cstdlib>. Đây là cách đơn giản nhất, tuy nhiên phụ thuộc nền tảng (platform-dependent).
Cú pháp cơ bản
#include <cstdlib>
int result = system("tên_chương_trình [tham_số]");
Ví dụ: Mở Notepad trên Windows
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
cout << "Dang mo Notepad..." << endl;
int ret = system("notepad.exe");
if (ret == 0) {
cout << "Notepad da dong." << endl;
} else {
cout << "Khong the mo Notepad. Ma loi: " << ret << endl;
}
}
Kết quả
Cửa sổ Notepad xuất hiện. Chương trình C++ chờ cho đến khi Notepad được đóng.
Các ví dụ khác
| Hệ điều hành | Lệnh | Mô tả |
|---|---|---|
| Windows | system("calc.exe") | Mở Calculator |
| Windows | system("start https://example.com") | Mở URL trong trình duyệt mặc định |
| Linux/macOS | system("gedit") | Mở trình soạn thảo Gedit |
| Linux/macOS | system("xdg-open https://example.com") | Mở URL trong trình duyệt mặc định |
| Cross-platform | system("python3 script.py") | Chạy script Python |
Lưu ý quan trọng
- Bảo mật: Không dùng
system()với input từ người dùng không tin cậy (lỗ hổng injection) - Hiệu suất: Tạo tiến trình mới tốn tài nguyên
- Phụ thuộc OS: Lệnh khác nhau giữa Windows/Linux/macOS
- Chờ đợi:
system()block cho đến khi tiến trình con kết thúc
Thay thế hiện đại (C++17 trở lên)
Sử dụng std::process (chưa chuẩn) hoặc thư viện bên thứ ba như boost::process để kiểm soát tốt hơn: đọc output, không block, xử lý cross-platform.
Ví dụ nâng cao: Chạy lệnh và lấy output (Linux)
#include <cstdio>
#include <iostream>
#include <memory>
#include <string>
string exec(const char* cmd) {
char buffer[128];
string result;
unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
if (!pipe) return "ERROR";
while (fgets(buffer, sizeof(buffer), pipe.get()) != nullptr) {
result += buffer;
}
return result;
}
int main() {
string output = exec("ls -la");
cout << output;
}