溫馨提示×

c++ exec輸出如何壓縮

c++
小樊
103
2024-12-01 14:55:14
欄目: 編程語言

在C++中,如果你想通過exec函數執行外部命令并壓縮其輸出,你可以使用管道(pipe)和gzip工具來實現。以下是一個示例代碼,展示了如何使用exec函數執行命令并將輸出壓縮為.gz文件:

#include <iostream>
#include <cstdio>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    pid_t pid = fork();

    if (pid == 0) { // 子進程
        // 將標準輸出重定向到管道
        dup2(pipe(stdout_pipe), STDOUT_FILENO);

        // 執行外部命令(例如,ls命令)
        execlp("ls", "ls", "-l", NULL);

        // 如果execlp執行失敗,退出子進程
        perror("execlp");
        exit(EXIT_FAILURE);
    } else if (pid > 0) { // 父進程
        // 關閉子進程的輸出管道
        close(stdout_pipe[0]);
        close(stdout_pipe[1]);

        // 創建一個.gz文件用于存儲壓縮后的輸出
        FILE* gzfile = fopen("output.gz", "wb");
        if (!gzfile) {
            perror("fopen");
            return 1;
        }

        // 將子進程的標準輸出重定向到gzip壓縮
        gzip_stdio(gzfile);

        // 等待子進程完成
        wait(NULL);
    } else { // fork失敗
        perror("fork");
        return 1;
    }

    return 0;
}

在這個示例中,我們首先使用fork()創建一個子進程。子進程將執行ls -l命令,并將其輸出重定向到管道。父進程將關閉子進程的輸出管道,然后創建一個名為output.gz的文件用于存儲壓縮后的輸出。接著,我們使用gzip_stdio()函數將子進程的標準輸出重定向到gzip壓縮。最后,父進程等待子進程完成。

這個示例將執行ls -l命令,將其輸出壓縮為output.gz文件。你可以根據需要修改外部命令和輸出文件名。

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