在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文件。你可以根據需要修改外部命令和輸出文件名。