Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khởi chạy chương trình khác từ C++

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ànhLệnhMô tả
Windowssystem("calc.exe")Mở Calculator
Windowssystem("start https://example.com")Mở URL trong trình duyệt mặc định
Linux/macOSsystem("gedit")Mở trình soạn thảo Gedit
Linux/macOSsystem("xdg-open https://example.com")Mở URL trong trình duyệt mặc định
Cross-platformsystem("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;
}