溫馨提示×

c++ exec函數怎樣處理輸出

c++
小樊
111
2024-12-07 12:40:42
欄目: 編程語言

在C++中,exec函數用于在當前進程中執行另一個程序

#include <iostream>
#include <string>
#include <vector>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    std::string command = "ls -l"; // 示例命令:列出當前目錄下的所有文件及其詳細信息
    std::vector<char*> args = {nullptr}; // 初始化參數數組

    // 將命令字符串拆分為參數數組
    char* token = strtok(command.c_str(), " ");
    while (token != nullptr) {
        args.push_back(token);
        token = strtok(nullptr, " ");
    }
    args.push_back(nullptr); // 添加空指針以表示參數數組的結束

    // 使用exec函數執行命令
    pid_t pid = fork();
    if (pid == 0) { // 子進程
        execvp(args[0], args.data()); // 執行命令
        perror("execvp"); // 如果execvp失敗,打印錯誤信息
        exit(EXIT_FAILURE); // 退出子進程
    } else if (pid > 0) { // 父進程
        int status;
        waitpid(pid, &status, 0); // 等待子進程完成
        if (WIFEXITED(status)) { // 如果子進程正常退出
            std::cout << "子進程退出,退出碼:" << WEXITSTATUS(status) << std::endl;
        } else { // 如果子進程異常退出
            std::cerr << "子進程異常退出" << std::endl;
        }
    } else { // fork失敗
        perror("fork"); // 打印錯誤信息
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

在這個示例中,我們使用fork()創建一個子進程,然后在子進程中使用execvp()執行命令。execvp()函數會替換當前進程的映像,因此子進程的輸出將被重定向到命令的輸出。父進程可以使用waitpid()等待子進程完成,并根據返回的狀態碼判斷子進程是否正常退出。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女