91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何在c++中處理cmd命令的長時間運行問題

c++
小樊
83
2024-09-15 18:45:35
欄目: 編程語言

在C++中處理CMD命令長時間運行的問題,可以通過創建一個子進程來執行命令,并使用管道(pipe)或共享內存(shared memory)來獲取輸出結果

#include<iostream>
#include<string>
#include <cstring>
#include<thread>
#include<chrono>

#ifdef _WIN32
#include<windows.h>
#else
#include <unistd.h>
#endif

void runCommand(const std::string& cmd, std::string& output) {
    output.clear();

#ifdef _WIN32
    // Windows平臺
    SECURITY_ATTRIBUTES sa = {sizeof(sa), NULL, TRUE};
    HANDLE hReadPipe, hWritePipe;
    CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);

    STARTUPINFO si = {sizeof(si)};
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    si.hStdOutput = hWritePipe;
    si.hStdError = hWritePipe;
    si.wShowWindow = SW_HIDE;

    PROCESS_INFORMATION pi;
    if (CreateProcess(NULL, const_cast<char*>(cmd.c_str()), NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
        CloseHandle(hWritePipe);

        char buffer[1024];
        DWORD bytesRead;
        while (ReadFile(hReadPipe, buffer, sizeof(buffer) - 1, &bytesRead, NULL) && bytesRead) {
            buffer[bytesRead] = '\0';
            output += buffer;
        }

        WaitForSingleObject(pi.hProcess, INFINITE);
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    }
    CloseHandle(hReadPipe);

#else
    // Unix平臺
    int pipefd[2];
    pipe(pipefd);

    pid_t pid = fork();
    if (pid == 0) {
        close(pipefd[0]);
        dup2(pipefd[1], STDOUT_FILENO);
        dup2(pipefd[1], STDERR_FILENO);
        execl("/bin/sh", "sh", "-c", cmd.c_str(), NULL);
        exit(1);
    } else {
        close(pipefd[1]);
        char buffer[1024];
        ssize_t bytesRead;
        while ((bytesRead = read(pipefd[0], buffer, sizeof(buffer) - 1)) > 0) {
            buffer[bytesRead] = '\0';
            output += buffer;
        }
        waitpid(pid, NULL, 0);
    }
    close(pipefd[0]);
#endif
}

int main() {
    std::string cmd = "ping www.example.com -n 10"; // 這里可以替換為你需要執行的命令
    std::string output;

    std::cout << "Running command: "<< cmd<< std::endl;
    runCommand(cmd, output);
    std::cout << "Command output:"<< std::endl<< output<< std::endl;

    return 0;
}

這個示例代碼會創建一個子進程來執行指定的CMD命令,并通過管道(pipe)或共享內存(shared memory)來獲取命令的輸出結果。注意,這個示例代碼只適用于Windows和Unix平臺。如果你需要在其他平臺上運行,請根據平臺的特性進行相應的修改。

0
扎鲁特旗| 城步| 亳州市| 隆德县| 五常市| 水城县| 阿拉善盟| 伽师县| 富裕县| 平乡县| 乐亭县| 西丰县| 蒙城县| 当涂县| 大姚县| 九江县| 望奎县| 武冈市| 浙江省| 安丘市| 蒲江县| 蛟河市| 天门市| 德令哈市| 洞头县| 沈丘县| 维西| 灌南县| 商城县| 调兵山市| 山阴县| 深州市| 屏山县| 山东省| 巴楚县| 精河县| 瑞安市| 长葛市| 堆龙德庆县| 疏勒县| 温泉县|