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

溫馨提示×

c++中怎么用CreatePipe()函數操縱控制臺

c++
小億
83
2023-10-22 05:47:21
欄目: 編程語言

在C++中,可以使用CreatePipe函數來創建一個管道,并將其連接到控制臺輸入和輸出。下面是一個使用CreatePipe函數操縱控制臺的示例代碼:

#include <Windows.h>
#include <iostream>

int main() {
    HANDLE hReadPipe, hWritePipe;
    SECURITY_ATTRIBUTES sa;
    PROCESS_INFORMATION pi;
    STARTUPINFO si;

    // 創建管道
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = TRUE;
    sa.lpSecurityDescriptor = NULL;

    if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) {
        std::cout << "Failed to create pipe" << std::endl;
        return 1;
    }

    // 將標準輸出重定向到管道寫入端
    GetStartupInfo(&si);
    si.dwFlags = STARTF_USESTDHANDLES;
    si.hStdOutput = hWritePipe;

    // 創建子進程并執行命令
    if (!CreateProcess(NULL, "ping 127.0.0.1", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
        std::cout << "Failed to create process" << std::endl;
        return 1;
    }

    // 從管道讀取子進程的輸出
    const int bufferSize = 4096;
    char buffer[bufferSize];
    DWORD bytesRead;
    while (ReadFile(hReadPipe, buffer, bufferSize - 1, &bytesRead, NULL) && bytesRead != 0) {
        buffer[bytesRead] = '\0';
        std::cout << buffer;
    }

    // 等待子進程退出
    WaitForSingleObject(pi.hProcess, INFINITE);

    // 關閉句柄
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    CloseHandle(hReadPipe);
    CloseHandle(hWritePipe);

    return 0;
}

上面的代碼創建了一個管道,并將子進程的標準輸出重定向到管道的寫入端。然后,它從管道的讀取端讀取子進程的輸出,并將其打印到控制臺。最后,它等待子進程退出并關閉相關的句柄。請替換ping 127.0.0.1為你想要執行的命令。

0
施甸县| 肇东市| 黄浦区| 陆良县| 阜新| 旌德县| 淳安县| 格尔木市| 博白县| 汽车| 宁陵县| 周至县| 双城市| 郯城县| 商城县| 汉寿县| 揭阳市| 武胜县| 汕头市| 隆回县| 南靖县| 长宁区| 永泰县| 永嘉县| 陵川县| 元谋县| 安远县| 固安县| 从江县| 大余县| 沙田区| 高安市| 河东区| 上栗县| 丹凤县| 池州市| 金塔县| 浑源县| 五华县| 定边县| 扎鲁特旗|