2015-11-20 17 views
1

我有一個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。我可以使用「管道」來達到這個目的嗎?

回答

相關問題