如何在c++中使用管道技術(shù)執(zhí)行cmd命令

c++
小樊
99
2024-09-15 18:39:11

在C++中,你可以使用popen()函數(shù)來(lái)創(chuàng)建一個(gè)管道并執(zhí)行CMD命令

#include<iostream>
#include <fstream>
#include<string>

int main() {
    // 要執(zhí)行的CMD命令
    std::string cmd = "dir";
    
    // 打開(kāi)管道并執(zhí)行命令
    FILE* pipe = popen(cmd.c_str(), "r");
    if (!pipe) {
        std::cerr << "Failed to execute command."<< std::endl;
        return 1;
    }

    // 讀取命令輸出
    char buffer[128];
    std::string result;
    while (fgets(buffer, sizeof(buffer), pipe)) {
        result += buffer;
    }

    // 關(guān)閉管道
    pclose(pipe);

    // 輸出結(jié)果
    std::cout << "Command output: "<< std::endl<< result<< std::endl;

    return 0;
}

這個(gè)示例將執(zhí)行dir命令(列出當(dāng)前目錄下的文件和文件夾),然后將輸出讀取到result字符串中。請(qǐng)注意,這個(gè)示例僅適用于Unix系統(tǒng)(如Linux和macOS)。在Windows上,你需要使用_popen()函數(shù)代替popen()。

對(duì)于Windows系統(tǒng),請(qǐng)包含<stdio.h>頭文件,并將popen()替換為_popen(),將pclose()替換為_pclose()。這是一個(gè)適用于Windows的示例:

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

int main() {
    // 要執(zhí)行的CMD命令
    std::string cmd = "dir";
    
    // 打開(kāi)管道并執(zhí)行命令
    FILE* pipe = _popen(cmd.c_str(), "r");
    if (!pipe) {
        std::cerr << "Failed to execute command."<< std::endl;
        return 1;
    }

    // 讀取命令輸出
    char buffer[128];
    std::string result;
    while (fgets(buffer, sizeof(buffer), pipe)) {
        result += buffer;
    }

    // 關(guān)閉管道
    _pclose(pipe);

    // 輸出結(jié)果
    std::cout << "Command output: "<< std::endl<< result<< std::endl;

    return 0;
}

這個(gè)示例將在Windows上執(zhí)行相同的操作。

0