Cách run Linux command trong c++ process và get được output

MỤC LỤC:

ảnh: run command linux trong C++
Trong công việc để tool hóa các công việc, chúng ta nghĩ đến bài toán tạo một app bởi chính C++ để thực hiện một công việc nào đó liên quan đến dòng lệnh

Về cơ bản, chúng ta cần 2 thứ: 

  1. Get thông tin từ dòng lệnh (output của một câu lệnh nào đó)
  2. Dựa trên thông tin get được ở No.1, ta thực hiện điều ta muốn bởi một command khác.

#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>

using namespace std;

std::string exec(const char* cmd) {
    char buffer[128];
    std::string result = "";
    FILE* pipe = popen(cmd, "r");
    if (!pipe) throw std::runtime_error("popen() failed!");
    try {
        while (fgets(buffer, sizeof buffer, pipe) != NULL) {
            result += buffer;
        }
    } catch (...) {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return result;
}

int main()
{
    cout << exec("cd /home/tuantitien/Desktop ; ls -la");
    return 0;
}

console sẽ thu được kết quả:

total 20
drwxrwxrwx  4 tuantitien tuantitien 4096 Jan 18 05:08 .
drwxrwxrwx 21 tuantitien tuantitien 4096 May 16 10:44 ..
-rwxrwxrwx  1 tuantitien tuantitien 1159 Jun 29  2021 git_config.txt
drwxrwxrwx  5 tuantitien tuantitien 4096 Feb 11 05:25 KEM
drwxrwxrwx  3 tuantitien tuantitien 4096 Jan 18 04:47 setupAnhLT

Giả sử, căn cứ trên kết quả trả về, ta có thể làm một điều gì đó, giả sử xóa một file ta biết được trong list trả về của command "ls -la"

cout << exec("cd /home/gen5p/Desktop ; rm -r git_config.txt");

TuanTitien++

Author:

Tôi là Tuấn Anh, một lập trình viên C++, hiện tại đang làm việc với Qt Framework. Giờ đã là bố của một thanh niên nhỏ, gần đây tôi thấy mình cần sống có trách nhiệm hơn nữa. : ]] Tôi cảm thấy nếu tôi không có nơi nào đó để ghi lại, tôi sẽ quên mất nhiều thứ. Dấu chân trên cát cũng vậy, nếu ta không chụp ảnh nó lại, rồi nó cũng sẽ bị gió làm mờ đi dần rồi mất hút hẳn. Cảm ơn anh em đã ghé qua và đọc những gì tôi viết. Hữu duyên thiên lý Ngô tương nặng, à nhầm Năng tương ngộ. : ]] Thân ái 3000!
© Giao diện website thiết kế bởi TuanTiTien.com