我有一個c程序應用程序,它能夠生成一個包含壓縮數據的文件,然後通過添加必要的zlib頁眉和頁腳轉換爲zlib格式。我想通過在應用程序中調用zlib的zpipe可執行文件來驗證數據是否已被正確壓縮。從我的c程序中調用時,如何將數據傳遞給zlib的zpipe可執行文件,該可執行文件使用stdin/stdout?
要直接從linux命令行調用zpipe,語法如下:zpipe用法:zpipe [-d] < source> dest,其中'-d'表示解壓縮。因此,使用linux命令行shell將源文件的內容導向stdin並將擴展數據導向stdout。
我的應用程序有它自己的主要功能。最初,我能夠將zpipe源代碼構建到我的應用程序中,並將來自zpipe主函數的必要代碼合併到我的應用程序的主函數中,從而直接調用zpipe的膨脹和縮小函數。
與其合併zpipe源代碼本身,我現在想要做的是從我的應用程序的主函數中調用zpipe可執行文件本身。
我調用我自己的應用程序的主要功能從Linux命令行,如下所示: ./myapp ./zpipe -d -i zlib_format_input_compressed_file -o output_decompressed_file
我能夠從我的應用程序中調用zpipe可執行,通過構建一個newargv,然而這個操作將不會成功,直到我真的可以讓zpipe解壓我給它的文件數據。
char *newargv[] = {argv[1], argv[2]}; // for zpipe, argc = 2
if (0 == (my_pid = fork())) {
if (-1 == execve(argv[1], newargv, NULL)) {
perror("child process execve failed [%m]");
return -1;
}
}
的問題是,我怎麼養活「zlib_format_input_compressed_file」的內容zpipe的從我的C程序中的標準輸入,就像是在命令行shell做,並告訴zpipe直接的結果output_decompressed_file。我可以使用「管道」來達到這個目的嗎?